Сегодня большинство из нас используют драйверы, совместимые с JDBC 4.2, что немного улучшает ситуацию по сравнению с ответами 2015 года.
Чтобы получить LocalDate
из набора результатов:
LocalDate dateFromDatabase = yourResultSet.getObject(yourColumnIndex, LocalDate.class);
or
LocalDate dateFromDatabase = yourResultSet.getObject("yourColumnLabel", LocalDate.class);
В ResultSet
не было добавлено никаких новых методов, чтобы это работало. Метод getObject
был там все время. Новое в том, что начиная с JDBC 4.2 он принимает LocalDate.class
в качестве второго аргумента и возвращает LocalDate
. Вышеупомянутое работает, когда запрос возвращает столбец с типом данных SQL date
(на самом деле учитывается тип JDBC, но они склонны соглашаться).
Вы также можете передавать классы других типов java.time. И получите обратно соответствующий тип. Например:
OffsetDateTime dateTimeFromDatabase
= yourResultSet.getObject(yourTimestampWithTimeZoneColumnIndex, OffsetDateTime.class);
Используемые типы java.time:
SQL datatype | java.time type
------------------------+-----------------------------------------------------------
date | LocalDate
time | LocalTime
timestamp | LocalDateTime
timestamp with timezone | Officially OffsetDateTime; many drivers accept Instant too
time with timezone | OffsetTime
Для передачи другим путем, из Java в вашу базу данных (для использования в качестве параметров запроса или для хранения) PreparedStatement.setObject
теперь также принимает объекты указанных выше типов java.time. Поскольку вы передаете объект типа, при использовании этого пути нет необходимости в отдельном параметре типа.
person
Ole V.V.
schedule
27.02.2019
setObject()
иgetObject()
- person Meno Hochschild   schedule 21.04.2015