Как сохранить тип даты Java для типа даты MySQL?
Как сохранить тип даты Java для типа даты MySQL?
3 ответа
Смотри, что твой Date
это java.sql.Timestamp
(особенно если вы хотите, чтобы часы, минуты, секунды... сохранялись)
Вы могли бы преобразовать java.util.Date
к Timestamp
вот так: new Timestamp(date.getTime())
Используйте некоторый экземпляр класса Calendar, чтобы преобразовать дату в строку и использовать строку в своем запросе SQL.
Использовать PreparedStatement
выполнить инструкцию SQL, например так:
Date date = ...;
PreparedStatement ps = connection.prepareStatement("INSERT INTO mytable (this, that, datecol) values (?, ?, ?)");
ps.setString(1, "hello");
ps.setString(2, "world");
ps.setTimestamp(3, new java.sql.Timestamp(date.getTime()));
ps.executeUpdate();
Когда вы делаете это таким образом, вы позволяете драйверу JDBC преобразовывать его в формат, который ожидает база данных, чтобы ваша программа могла оставаться независимой от базы данных (вам не нужно иметь дело с форматированием так, как MySQL ожидает это самостоятельно),
При запросе базы данных, также используйте PreparedStatement
и использовать getTimestamp()
метод на ResultSet
чтобы получить дату как java.sql.Timestamp
объект.
java.time
Современный подход использует классы java.time.
В DATE
Тип в MySQL представляет собой только дату, без времени суток и без одной зоны.
Так что используйте LocalDate
с драйвером, совместимым с JDBC 4.2.
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate today = LocalDate.now( z ) ;
myPreparedStatement.setObject( … , today ) ;
Извлечение.
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;