От страна на Java датата обикновено се представя от (лошо проектирана, но настрана) java.util.Date
. Основно е подкрепено от епохалното време
във вид на дълъг
, известен също като времева марка. Той съдържа информация за частите за дата и час. В Java точността е в милисекунди.
В SQL страна има няколко стандартни типа дата и час, DATE
, ВРЕМЕ
и TIMESTAMP
(в някои DB се наричат също DATETIME
), които са представени в JDBC като java.sql.Date
, java.sql.Timeкод>
и java.sql.Timestampкод>
, всички подкласове на java.util.Date
. Прецизността зависи от DB, често в милисекунди като Java, но може да бъде и за секунди.
За разлика от java.util.Date
, java.sql.Date
съдържа само информация за частта от датата (година, месец, ден). Времето
съдържа само информация за частта от времето (часове, минути, секунди) и Timestamp
съдържа информация за двете части, като java.util.Date
прави.
Нормалната практика за съхраняване на времева марка в DB (по този начин, java.util.Date
от страна на Java и java.sql.Timestamp
от страна на JDBC) е да използвате 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);
Нормалната практика за получаване на времева марка от DB е да се използва ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.