Comment obtenir un java.le temps l'objet de java.sql.Timestamp sans JDBC 4.2 pilote?
Lors de la récupération d'un java.sql.Timestamp à partir d'une base de données via JDBC 4.1 ou une version antérieure, comment obtenir/convertir en un java.le temps objet?
Ni de l'open-source des pilotes JDBC pour Postgres est JDBC 4.2 conforme, de sorte que je suis à la recherche d'un moyen d'utiliser java.temps avec JDBC 4.1.
- Puis-je vous demander pourquoi vous avez besoin d'utiliser java.le temps, qui apparaissent à nouveau 1.8 classes?
- Parce que java.util.Date & .De calendrier sont notoirement difficile. J'ai l'habitude d'utiliser Joda-Time à la place. Mais j'ai été barboteurs avec java.de temps en Java 8. La java.package est inspiré par Joda-Temps, mais qui est totalement restructurée.
- mise à JOUR: Alors que j'ai accepté la Réponse par pickypg comme correctement aborder les spécificités de ma Question, la meilleure solution est d'utiliser uniquement le java.les classes de temps avec JDBC 4.2 tout en évitant complètement le gênants héritage java.sql classes. L'échange de java.le temps des objets directement avec la base de données; pas besoin de conversion. Voir le Réponse par skrueger.
Vous devez vous connecter pour publier un commentaire.
De Nouvelles Méthodes Sur Les Anciennes Classes
En utilisant le pilote avec Java 8 et les versions ultérieures, vous devez automatiquement ramasser quelques méthodes sur votre
java.sql.Timestamp
objet gratuitement. Les deuxjava.sql.Temps
etjava.sql.Date
ont les mêmes méthodes de conversion.À savoir, pour convertir de java.sql à java.temps vous êtes à la recherche pour:
Timestamp::toInstant()
Timestamp::toLocalDateTime()
Date: toLocalDate()
Temps::toLocalTime()
Aller dans l'autre direction, à partir de java.temps à java.sql, utiliser les nouvelles méthodes statiques:
Timestamp.à partir de(instantanée)
Timestamp.valueOf(localDateTime)
Date.valueOf(localDate)
Temps.valueOf(localTime)
Exemple:
java.sql.Timestamp
de la classe de nouvelles fonctionnalités.Instant
comme on le voit dans cette Réponse, vous pouvez appliquer unZoneOffset
pour obtenir unOffsetDateTime
, ou mieux, appliquer unZoneId
pour obtenir unZonedDateTime
. Pour plus d'informations, voir ma Réponse et mon schéma sur une autre Question.setTimestamp
réponse pour plus de détails.Pas besoin de convertir
Comme d'autres l'ont dit dans les commentaires, PostgreSQL du pilote JDBC prend maintenant en charge de JDBC 4.2, y compris Java 8 Temps de prise en charge des API. Nous pouvons échanger java.temps objets directement avec la base de données.
https://jdbc.postgresql.org/documentation/head/8-date-time.html
Donc pas besoin de convertir, pas besoin de toujours utiliser le java.les types sql de nouveau. Utiliser uniquement leurs remplaçants dans le java.temps emballage comme indiqué dans cette liste.
Cela peut être récupéré via
ResultSet::getObject
Stocker une java.temps objet en appelant
PreparedStatement::setObject
.