Obtenir la date actuelle en java.SQL.Format de la Date
j'ai besoin d'ajouter la date actuelle dans une déclaration préparée d'un appel JDBC. Je dois ajouter la date dans un format comme yyyy/MM/dd
.
j'ai essayer 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
y a-t-il un moyen d'obtenir un objet java.sql.Date
avec le même format?
8 réponses
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 aurez besoin de le convertir en un java.sql.Date
en utilisant le constructeur qui prend un long
qu'un java.util.Date
peut fournir.
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
simplement sur une ligne:
java.sql.Date date = new java.sql.Date(Calendar.getInstance().getTime().getTime());
ceux-ci sont trop longs.
il suffit d'utiliser:
new Date(System.currentTimeMillis())
tl; dr
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.
)
)
de java.time
La méthode moderne utilise la de java.les classes de temps qui supplantent les anciennes classes d'héritage difficiles telles que java.util.Date
et java.sql.Date
.
pour une valeur date seulement, utilisez LocalDate
. La classe LocalDate
représente une date sans Heure de la journée et sans fuseau horaire.
le Java.les classes de temps utilisent des formats standards pour analyser / générer des chaînes. Donc pas besoin de spécifier le format.
LocalDate ld = LocalDate.parse( input ) ;
vous pouvez directement échanger java.time objets avec votre base de données en utilisant un pilote JDBC conforme à JDBC 4.2 ou plus tard. Vous pouvez oublier la transformation et de java.SQL.* classe.
myPreparedStatement.setObject( … , ld ) ;
Récupération:
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
à Propos de de java.heure
Le de java.time framework est construit dans Java 8 et plus tard. Ces classes remplacent les anciennes héritées classes de date-heure telles que java.util.Date
, Calendar
, & SimpleDateFormat
.
le projet "Joda-Time , maintenant en mode maintenance , conseille la migration vers le java.temps des classes.
pour en savoir plus, voir le Oracle Tutorial . Et rechercher le débordement de la pile pour de nombreux exemples et explications. La spécification est JSR 310 .
où obtenir le java.les classes de temps?
- Java SE 8 , Java SE 9 , et plus tard
- Built-in.
- fait partie de L'API Java standard avec une implémentation groupée.
- Java 9 ajoute des fonctionnalités mineures et des corrections.
- Java SE 6 et Java SE 7
- une grande partie de la java.la fonctionnalité time est rétroportée à Java 6 & 7 dans ThreeTen-Backport .
- Android
- versions ultérieures de Les implémentations du paquet Android de java.les classes de temps.
- pour Android plus tôt, le ThreeTenABP projet adapte ThreeTen-Backport (mentionné ci-dessus). Voir comment utiliser ThreeTenABP... .
The ThreeTen-Extra le projet s'étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'expérimentation pour d'éventuelles futures additions à java.temps. Vous pouvez trouver ici quelques cours utiles tels que: Interval
, YearWeek
, YearQuarter
, et plus .
vous pouvez atteindre votre objectif avec les moyens ci-dessous: -
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());
tout ce que vous avez à faire est de cette
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)