Na straně Java je datum obvykle reprezentováno (špatně navrženým, ale to stranou) java.util.Date
. V zásadě je podporována dobou epochy
v příchuti dlouhého
, také známý jako časové razítko. Obsahuje informace o části data a času. V Javě je přesnost v milisekundách.
Na straně SQL existuje několik standardních typů data a času, DATE
, TIME
a TIMESTAMP
(v některých DB se také nazývá DATETIME
), které jsou v JDBC reprezentovány jako java.sql.Date
, java.sql.Time
a java.sql.Timestamp
, všechny podtřídy z java.util.Date
. Přesnost závisí na DB, často v milisekundách jako Java, ale může být také v sekundách.
Na rozdíl od java.util.Date
, java.sql.Date
obsahuje pouze informace o části data (rok, měsíc, den). Čas
obsahuje pouze informace o časové části (hodiny, minuty, sekundy) a Časové razítko
obsahuje informace o obou částech, například java.util.Date
ano.
Běžná praxe ukládat časové razítko do DB (tedy java.util.Date
na straně Java a java.sql.Timestamp
na straně JDBC) je použít 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);
Běžnou praxí pro získání časového razítka z DB je použít ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.