Je dois ajouter la date actuelle dans une déclaration préparée d'un appel JDBC. Je dois ajouter la date dans un format tel que yyyy/MM/dd
.
J'ai essayé avec
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
pstm.setDate(6, (Java.sql.Date) date);
mais j'ai cette erreur:
threw exception
Java.lang.ClassCastException: Java.util.Date cannot be cast to Java.sql.Date
Existe-t-il un moyen d’obtenir un objet Java.sql.Date
avec le même format?
Un Java.util.Date
n'est pas un Java.sql.Date
. C'est l'inverse. Un Java.sql.Date
est un Java.util.Date
.
Vous devrez le convertir en Java.sql.Date
en utilisant le constructeur qui prend une long
qu'un Java.util.Date
peut fournir.
Java.sql.Date sqlDate = new Java.sql.Date(utilDate.getTime());
Simplement en une ligne:
Java.sql.Date date = new Java.sql.Date(Calendar.getInstance().getTime().getTime());
new Java.sql.Date(Calendar.getInstance().getTimeInMillis());
Ce sont tous trop long.
Il suffit d'utiliser:
new Date(System.currentTimeMillis())
myPreparedStatement.setObject( // Directly exchange Java.time objects with database without the troublesome old Java.sql.* classes.
… ,
LocalDate.parse( // Parse string as a `LocalDate` date-only value.
"2018-01-23" // Input string that complies with standard ISO 8601 formatting.
)
)
L'approche moderne utilise les classes Java.time qui supplantent les anciennes classes problématiques, telles que Java.util.Date
et Java.sql.Date
.
Pour une valeur de date uniquement, utilisez LocalDate
. La classe LocalDate
représente une valeur de date uniquement sans heure et sans fuseau horaire.
Les classes Java.time utilisent des formats standard pour analyser/générer des chaînes. Donc, pas besoin de spécifier un modèle de formatage.
LocalDate ld = LocalDate.parse( input ) ;
Vous pouvez échanger directement des objets Java.time avec votre base de données à l'aide d'un pilote JDBC conforme à JDBC 4.2 ou ultérieur. Vous pouvez oublier de transformer des classes Java.sql. *.
myPreparedStatement.setObject( … , ld ) ;
Récupération:
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date
, Calendar
_, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode { mode maintenance }, conseille la migration vers les classes Java.time .
Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Où obtenir les classes Java.time?
Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval
_, YearWeek
, YearQuarter
_ et plus _.
Va faire: new Date(Instant.now().toEpochMilli())
tout ce que vous avez à faire est ceci
Calendar currenttime = Calendar.getInstance(); //creates the Calendar object of the current time
Date sqldate = new Date((currenttime.getTime()).getTime()); //creates the sql Date of the above created object
pstm.setDate(6, (Java.sql.Date) date); //assign it to the prepared statement (pstm in this case)
Vous pouvez atteindre votre objectif avec les moyens suivants: -
long millis=System.currentTimeMillis();
Java.sql.Date date=new Java.sql.Date(millis);
ou
// create a Java calendar instance
Calendar calendar = Calendar.getInstance();
// get a Java date (Java.util.Date) from the Calendar instance.
// this Java date will represent the current date, or "now".
Java.util.Date currentDate = calendar.getTime();
// now, create a Java.sql.Date from the Java.util.Date
Java.sql.Date date = new Java.sql.Date(currentDate.getTime());