На стороне Java дата обычно представлена (плохо разработанной, но в стороне) java.util.Date
. Это в основном поддерживается Epoch time в аромате long
, также известном как отметка времени. Он содержит информацию о дате и времени. В Java точность указывается в миллисекундах.
На стороне SQL существует несколько стандартных типов даты и времени, DATE
, TIME
и TIMESTAMP
(в некоторых БД, также называемых DATETIME
), которые представлены в JDBC как java.sql.Date
, java.sql.Time
и java.sql.Timestamp
, все подклассы из java.util.Date
. Точность зависит от БД, часто в миллисекундах, как Java, но также может быть в секундах.
В отличие от java.util.Date
, java.sql.Date
содержит только информацию о части даты (год, месяц, день). Time
содержит только информацию о временной части (часы, минуты, секунды), а Timestamp
содержит информацию об обеих частях, как java.util.Date
.
Обычной практикой для хранения временной метки в БД (например, 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);
Обычной практикой для получения метки времени из БД является использование ResultSet#getTimestamp()
.
Timestamp timestamp = resultSet.getTimestamp("ts");
java.util.Date date = timestamp; // You can just upcast.