J'essaie d'utiliser une java.util.Date
entrée et puis de créer une requête avec elle - j'ai donc besoin d'une java.sql.Date
.
J'ai été surpris de constater qu'il ne pouvait pas effectuer la conversion implicitement ou explicitement - mais je ne sais même pas comment je procéderais, car l'API Java est encore assez nouvelle pour moi.
import java.sql.*
dans mon code, remplaçant java.util.date et causant ainsi des problèmes lors de l'attribution de valeurs de date qui convenaient à ce dernier mais pas au premier. HTHDATE
signifie date uniquement.Réponses:
tl; dr
Non. Les deux classes sont dépassées.
java.util.Date
&java.sql.Date
avec JDBC 4.2 ou version ultérieure.Exemple de requête avec
PreparedStatement
.Remplaçants:
Instant
au lieu dejava.util.Date
Both représentent un moment en UTC. mais maintenant avec des nanosecondes au lieu de millisecondes.
LocalDate
au lieu dejava.sql.Date
Both représentent une valeur de date uniquement sans heure et sans fuseau horaire.
Détails
Si vous essayez de travailler avec des valeurs de date uniquement (pas d'heure, pas de fuseau horaire), utilisez
LocalDate
plutôt la classe quejava.util.Date
.java.time
Dans Java 8 et versions ultérieures, les anciennes classes de date-heure gênantes regroupées avec les premières versions de Java ont été remplacées par le nouveau package java.time . Voir Oracle Tutorial . Une grande partie de la fonctionnalité a été rétroportée vers Java 6 et 7 dans ThreeTen-Backport et adaptée à Android dans ThreeTenABP .
Un type de données SQL
DATE
est censé être à date uniquement, sans heure et sans fuseau horaire. Java n'a jamais eu précisément une telle classe † qu'enjava.time.LocalDate
Java 8. Créons une telle valeur en obtenant la date d'aujourd'hui en fonction d'un fuseau horaire particulier (le fuseau horaire est important pour déterminer une date comme un nouveau jour se lève plus tôt à Paris qu'à Montréal, pour exemple).À ce stade, nous pouvons avoir terminé. Si votre pilote JDBC est conforme à la spécification JDBC 4.2 , vous devriez pouvoir passer un
LocalDate
viasetObject
sur unPreparedStatement
pour le stocker dans un champ SQL DATE.De même, utilisez
ResultSet::getObject
pour extraire d'une colonne SQL DATE vers unLocalDate
objet Java . La spécification de la classe dans le deuxième argument rend votre code sûr pour le type .En d'autres termes, toute cette question n'est pas pertinente sous JDBC 4.2 ou version ultérieure.
Si votre pilote JDBC ne fonctionne pas de cette manière, vous devez vous replier sur la conversion aux types java.sql.
Convertir en java.sql.Date
Pour convertir, utilisez de nouvelles méthodes ajoutées aux anciennes classes date-heure. Nous pouvons appeler
java.sql.Date.valueOf(…)
pour convertir unLocalDate
.Et aller dans l'autre sens.
Conversion de
java.util.Date
Bien que vous deviez éviter d'utiliser les anciennes classes de date-heure, vous pourriez être obligé de le faire lorsque vous travaillez avec du code existant. Si c'est le cas, vous pouvez convertir vers / depuis java.time.
Parcourez la
Instant
classe, qui représente un moment de la chronologie en UTC. UneInstant
idée est similaire à unejava.util.Date
. Mais notez qu'ilInstant
a une résolution jusqu'à nanosecondes alors qu'iljava.util.Date
n'a qu'une résolution en millisecondes .Pour convertir, utilisez de nouvelles méthodes ajoutées aux anciennes classes. Par exemple,
java.util.Date.from( Instant )
etjava.util.Date::toInstant
.Pour déterminer une date, nous avons besoin du contexte d'un fuseau horaire. Pour un moment donné, la date varie dans le monde entier par fuseau horaire. Appliquez un
ZoneId
pour obtenir unZonedDateTime
.† La classe java.sql.Date prétend être datée uniquement sans heure, mais fait en fait une heure, ajustée à minuit. Déroutant? Oui, les anciennes classes de date-heure sont un gâchis.
À propos de java.time
Le framework java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciens gênants hérités des classes date-heure tels que
java.util.Date
,Calendar
, etSimpleDateFormat
.Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes java.time .
Pour en savoir plus, consultez le didacticiel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Vous pouvez échanger des objets java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de
java.sql.*
cours.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 de futurs ajouts possibles à java.time. Vous trouverez peut - être des classes utiles ici, comme
Interval
,YearWeek
,YearQuarter
et plus .la source
Ça ne fait rien....
l'explique. Le lien est http://www.java2s.com/Tutorial/Java/0040__Data-Type/ConvertfromajavautilDateObjecttoajavasqlDateObject.htm
la source
epochseconds
ie millisecondes après1,JAN,1970
. Mais que faire si nous voulons stocker la date d'une personne avant cette date ... ou quelque chose comme0000-00-00 as default
Avec l'autre réponse, vous pouvez avoir des problèmes avec les informations de temps (comparer les dates avec des résultats inattendus!)
Je suggère:
la source
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont désormais héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir Tutoriel par Oracle .Cette fonction renverra une date SQL convertie à partir d'un objet date java.
la source
La conversion
java.util.Data
enjava.sql.Data
perdra heure, minute et seconde. Donc, si c'est possible, je vous suggère d'utiliserjava.sql.Timestamp
comme ceci:Pour plus d'informations, vous pouvez vérifier cette question .
la source
Dans mon cas de choisir la date de JXDatePicker (calendrier java) et de la stocker dans la base de données en tant que type de date SQL, ci-dessous fonctionne très bien.
java.sql.Date date = new java.sql.Date(pickedDate.getDate().getTime());
où pickDate est l'objet de JXDatePicker
la source
Cette fonction renverra une date SQL convertie à partir d'un objet date java.
la source
Formatez d'abord votre java.util.Date. Utilisez ensuite la date formatée pour obtenir la date dans java.sql.Date
la source
Voici l'exemple de conversion d'Util Date en Sql date et ya ceci est un exemple ce que j'utilise dans mon projet pourrait aussi vous être utile.
la source
Je suis novice: après avoir beaucoup couru, cela a fonctionné. La pensée pourrait être utile
la source
java.util.Date
,java.util.Calendar
etjava.text.SimpleDateFormat
sont désormais héritées , supplantées par les classes java.time intégrées à Java 8 et versions ultérieures. Voir Tutoriel par Oracle .Ici javaDate est l'instance de java.util.Date
la source
Méthode de comparaison de 2 dates (util.date ou sql.date)
la source
essayez avec ça
la source
Je pense que la meilleure façon de convertir est:
Si vous souhaitez insérer la
dt
variable dans une table SQL, vous pouvez faire:la source
J'utilise le code suivant, essayez-le
spécifiez par exemple le format de la date souhaitée
"DD-MM_YYYY"
ou'YYYY-mm-dd'
utilisez le type de données java Date commealors il analysera votre date
la source
Vous pouvez utiliser cette méthode pour convertir la date d'utilisation en date sql,
la source
J'essayais le codage suivant qui fonctionnait bien.
la source
Si vous utilisez Mysql une colonne de date peut être passée une représentation de chaîne de cette date
donc j'utilise la classe DateFormatter pour la formater, puis la définir comme une chaîne dans l'instruction sql ou l'instruction préparée
voici l'illustration du code:
String date = converUtilDateToSqlDate (otherTransaction.getTransDate ());
// puis passez cette date dans votre instruction sql
la source