Auf der Java-Seite wird das Datum normalerweise durch das (schlecht gestaltete, aber davon abgesehen) java.util.Date
. Es wird im Wesentlichen von der Epochenzeit
unterstützt im Geschmack eines long
, auch bekannt als Zeitstempel. Es enthält Informationen sowohl über das Datum als auch über die Uhrzeit. In Java wird die Genauigkeit in Millisekunden angegeben.
Auf der SQL-Seite gibt es mehrere standardmäßige Datums- und Zeittypen, DATE
, TIME
und TIMESTAMP
(bei manchen DB's auch DATETIME
genannt ), die in JDBC als java.sql.Date
, java.sql.Time
und java.sql.Timestamp
, alle Unterklassen von java.util.Date
. Die Genauigkeit ist DB-abhängig, oft in Millisekunden wie Java, kann aber auch in Sekunden sein.
Im Gegensatz zu java.util.Date
, das java.sql.Date
enthält nur Informationen über den Datumsteil (Jahr, Monat, Tag). Die Time
enthält nur Informationen über den Zeitteil (Stunden, Minuten, Sekunden) und den Timestamp
enthält Informationen über die beiden Teile, wie zum Beispiel java.util.Date
tut.
Die normale Praxis, einen Zeitstempel in der DB zu speichern (also java.util.Date
auf der Java-Seite und java.sql.Timestamp
auf der JDBC-Seite) ist die Verwendung von PreparedStatement#setTimestamp()
.
java.util.Date date = getItSomehow();
Timestamp timestamp = new Timestamp(date.getTime());
preparedStatement = connection.prepareStatement("SELECT * FROM tbl WHERE ts > ?");
preparedStatement.setTimestamp(1, timestamp);
Die übliche Vorgehensweise, um einen Zeitstempel von der DB zu erhalten, ist die Verwendung von ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.