2010-04-06 9 views
9

java.util.Date, java.util.Timetamp wurden verursacht, große Verwirrung für viele zu verursachen. Innerhalb von StackOverflow gibt es so viele Fragen, leider ist meine Frage etwas verdreht.ResultSet.getTimestamp ("Datum") vs ResultSet.getTimestamp ("Datum", Calendar.getInstance (tz))

Es gibt 2 JDBC api. Wie sollen sie funktionieren? Gab es irgendwelche Übereinstimmungen zwischen RDBMS?

Wenn jemand Wissen in Sybase hat, könnten Sie bitte Ihre Erfahrungen teilen?

Antwort

23

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.

+0

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