Wie man eine java.time-Objekt aus java.sql.Timestamp ohne einen 4.2 JDBC-Treiber?
Beim abrufen einer java.sql.Timestamp aus einer Datenbank via JDBC 4.1 oder früher, wie erlangt man/konvertieren, um eine java.Zeit Objekt?
Weder von der open-source-JDBC-Treiber für Postgres JDBC 4.2 kompatiblen noch, ich bin auf der Suche nach einem Weg zu verwenden, verwenden Sie java.Zeit mit JDBC 4.1.
- Darf ich Fragen, warum Sie benötigen, um mit java.Zeit, dass zu sein scheinen, neue 1.8-Klassen?
- Da in java.util.Datum & .Kalender sind bekanntlich lästig. Normalerweise verwende ich Joda-Time statt. Aber ich ' ve wurde Dilettantismus mit java.time in Java 8. Die java.Zeit Paket ist inspiriert von Joda-Time, aber ist re-architected.
- UPDATE: Während ich akzeptiert die Antwort von pickypg als korrekt Adressierung die Besonderheiten meiner Frage, die beste Lösung ist die Verwendung nur java.Zeit-Klassen mit JDBC 4.2, während die Vermeidung ganz üblen legacy-java.sql-Klassen. Exchange-java.Zeit-Objekte direkt mit der Datenbank; keine Notwendigkeit für die Konvertierung nicht mehr. Siehe die Antwort von skrueger.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Neue Methoden Auf Alte Klassen
Durch die Verwendung der Treiber, die mit Java 8 und höher, werden Sie automatisch abholen einige Methoden auf Ihre
java.sql.Timestamp
Objekt kostenlos. Beidejava.sql.Zeit
undjava.sql.Date
ähnliche conversion-Methoden.Nämlich konvertieren von java.sql zu java.Zeit Sie sind auf der Suche nach:
Timestamp::toInstant()
Timestamp::toLocalDateTime()
Datum::toLocalDate()
Time::toLocalTime()
Gehen die andere Richtung, von java.Zeit zu java.sql, verwenden Sie die neue statische Methoden:
Timestamp.aus(instant)
Timestamp.valueOf(localDateTime)
Datum.valueOf(localDate)
Zeit.valueOf(localTime)
Beispiel:
java.sql.Timestamp
Klasse' neue Funktionen.Instant
wie gesehen, in dieser Antwort, Sie können eineZoneOffset
, um eineOffsetDateTime
, oder besser, anwenden vonZoneId
, um eineZonedDateTime
. Weitere Informationen finden Sie unter meine Antwort und mein Diagramm auf eine andere Frage.setTimestamp
Antwort für mehr details.Keine Notwendigkeit, zu konvertieren
Wie andere schon sagten, in den Kommentaren, PostgreSQL JDBC-Treiber unterstützt nun JDBC 4.2 einschließlich Java 8 Zeit-API unterstützen. Können wir tauschen java.Zeit Objekte direkt mit der Datenbank.
https://jdbc.postgresql.org/documentation/head/8-date-time.html
Also keine Notwendigkeit, zu konvertieren, keine Notwendigkeit, immer mit dem java.sql-Typen wieder. Verwenden Sie nur mit Ihrer Vertretung in der java.Zeit - Paket, wie in dieser Liste aufgeführt.
Diese können abgerufen werden über
ResultSet::getObject
Speichern java.Zeit - Objekt durch Aufruf
PreparedStatement::setObject
.