Подтвердить что ты не робот

Как получить объект java.time из java.sql.Timestamp без драйвера JDBC 4.2?

При извлечении java.sql.Timestamp из базы данных через JDBC 4.1 или ранее, как получить/преобразовать в java.time объект?

Ни один из драйверов JDBC с открытым исходным кодом для Postgres не совместим с JDBC 4.2, поэтому я ищу способ использования java.time с JDBC 4.1.

4b9b3361

Ответ 1

Новые методы в старых классах

Используя драйвер с Java 8 и более поздними версиями, вы должны автоматически выбрать некоторые методы на своем java.sql.Timestamp объекте бесплатно. Оба java.sql.Time и java.sql.Date имеют похожие методы преобразования.

А именно, для преобразования из java.sql в java.time вы ищете:

Чтобы перейти в другое направление, от java.time до java.sql, используйте новые статические методы:

Пример:

preparedStatement.setTimestamp( 2, Timestamp.from(instant) );

Ответ 2

Нет необходимости конвертировать

Как уже говорили другие в комментариях, драйвер JDBC PostgreSQL теперь поддерживает JDBC 4.2, включая поддержку Java 8 Time API. Мы можем обмениваться объектами java.time напрямую с базой данных.

https://jdbc.postgresql.org/documentation/head/8-date-time.html

Так что нет необходимости конвертировать, нет необходимости снова использовать типы java.sql. Используйте только их замены в пакете java.time, как показано в этом списке.

PostgreSQL™                      Java SE 8 (java.time)
DATE                             LocalDate
TIME [ WITHOUT TIMEZONE ]        LocalTime
TIMESTAMP [ WITHOUT TIMEZONE ]   LocalDateTime
TIMESTAMP WITH TIMEZONE          OffsetDateTime or Instant

Это может быть получено через ResultSet::getObject

ResultSet rs = ...;
while (rs.next()) {
  LocalDate localDate = rs.getObject(1, LocalDate.class));
}

Сохраните объект java.time, вызвав PreparedStatement::setObject.

myPreparedStatement.setObject( … , myInstant ) ;