В JAVA-приложении, что польза поставила бы под угрозу с точки зрения экс-трассировки и ввода информации о дате с базой данных MySQL с помощью соединения datetimes и меток времени?
В Java дата обычно представлена (плохо разработанным, но это в сторону) java.util.Date
. В основном она подкреплена временем эпохи в виде 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.
В документации MySQL есть информация о сопоставлении типов MySQL с типами Java. Как правило, для даты и времени MySQL следует использовать java.sql.Timestamp
. Вот несколько ресурсов:
http://dev.mysql.com/doc/refman/5.1/en/datetime.html
http://www.coderanch.com/t/304851/JDBC/java/ Java-date-MySQL-date-conversion
Как сохранить Java Date в Mysql datetime ...?
РЕДАКТИРОВАТЬ:
Как указывали другие, предложение использовать строки может привести к проблемам.