Zuerst verwirren Sie java.util
mit java.sql
. Wenn Sie PreparedStatement#setDate()
und ResultSet#getDate()
verwenden, benötigen Sie java.sql.Date
. Bei Verwendung von PreparedStatement#setTimestamp()
und ResultSet#getTimestamp()
benötigen Sie java.sql.Timestamp
.
Zweitens ist es wichtig zu verstehen, dass java.sql.Date
nur das Datum (Jahr, Monat, Tag) und nichts weniger oder mehr darstellt. Dies soll einem Feldtyp SQL DATE
zugeordnet werden. Die java.sql.Timestamp
repräsentiert die Zeitmarke (Jahr, Monat, Tag, Stunde, Minute, Sekunde, Millisekunde), genau wie die java.util.Date
und java.util.Calendar
tut. Dies muss einem Feldtyp "SQL TIMESTAMP
" oder "DATETIME
" zugeordnet werden.
Die Zeitzonen benötigen Sie, wenn die Datenbank keine Zeitzoneninformationen speichert (daher werden alle Zeitstempel in UTC (GMT) gespeichert). Sie können dann eine Calendar
übergeben, die Informationen über die aktuelle Zeitzone enthält, damit der JDBC-Treiber den UTC-Zeitstempel an den Zeitstempel anpassen kann, der der Zeitzone entspricht. Wenn es zum Beispiel GMT + 1 ist, wird der JDBC-Treiber eine Stunde zu dem Zeitstempel hinzufügen, bevor er zurückkehrt.
Gute Antwort. Für weitere Informationen über die Variationen der verschiedenen Date-Klassen in JDBC können Sie meinen Beitrag hier beziehen: http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date/2306051# 2306051 – Esko