Aan Java-kant wordt de datum meestal weergegeven door de (slecht ontworpen, maar dat terzijde) java.util.Date
. Het wordt in principe ondersteund door de Epoch-tijd
in de smaak van een long
, ook wel een tijdstempel genoemd. Het bevat informatie over zowel het datum- als het tijdgedeelte. In Java is de precisie in milliseconden.
Aan de SQL-kant zijn er verschillende standaard datum- en tijdtypen, DATE
, TIME
en TIMESTAMP
(bij sommige DB's ook wel DATETIME
), die in JDBC worden weergegeven als java.sql.Date
, java.sql.Time
en java.sql.Timestamp
, alle subklassen van java.util.Date
. De precisie is DB-afhankelijk, vaak in milliseconden zoals Java, maar het kan ook in seconden zijn.
In tegenstelling tot java.util.Date
, de java.sql.Date
bevat alleen informatie over het datumgedeelte (jaar, maand, dag). De Time
bevat alleen informatie over het tijdgedeelte (uren, minuten, seconden) en de Timestamp
bevat informatie over beide delen, zoals als java.util.Date
doet.
De normale praktijk om een tijdstempel in de database op te slaan (dus java.util.Date
in Java-kant en java.sql.Timestamp
aan de JDBC-kant) is om 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);
De normale praktijk om een tijdstempel van de DB te verkrijgen, is het gebruik van ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.