Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Umgang mit MySQL-Datums- und Zeitstempeln in Java

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.