tl; dr
java.time.LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Использование смарт-объектов, а не немых строк
Вы храните значение даты-времени в столбце даты-времени, поэтому используйте тип даты-времени вДжава.В настоящее время вы используете строки.
Тип Oracle DATE
содержит только дату и время суток без какой-либо концепции часового пояса или смещения от UTC.Таким образом, столбец DATE
нельзя использовать для представления момента.Эквивалентом в стандартном SQL является TIMESTAMP WITHOUT TIME ZONE
.
Например, если строка хранит значение в этом столбце для 23 января этого года в полдень, мы знаем способ узнать, будет ли это полдень в Токио, полдень в Калькутте, полдень в Париже,или полдень в Монреале.Все эти разные полдни происходят в разные моменты, с интервалом в несколько часов.
Подходящий тип в Java для соответствия столбцу Oracle DATE
- LocalDateTime
.В этом классе также отсутствует понятие часового пояса или смещения от UTC.Так что это не может быть использовано для представления момента.Но когда у вас есть только дата и время суток без зоны / смещения, этот класс для вас.
JDBC 4.2 и более поздних версий требует поддержки прямого обмена java.time объектамис базой данных.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Запись данных.
myPreparedStatemen.setObject( … , ldt ) ;
Путем замены объекта Java без какой-либо зоны / смещения на столбец базы данных типов без какой-либо зоны / смещения, у вас будетнет проблем с зоной / смещением .Но следует помнить об ограничениях такого типа значения даты и времени:
- Ни минуты, ни точки на временной шкале.
- Неоднозначно, поскольку его можно интерпретировать как любое измножество потенциальных моментов в диапазоне около 26-27 часов (диапазон часовых поясов вокруг земного шара).