Java ResultSet.getString() для поля даты пропускает миллисекунду

Я использую ojdbc8 версии 21.3.0.0 и получаю столбец Date в Oracle в виде строки. Я ожидал, что строка будет напечатана как 2021-01-21 00:00:00.0, но она печатается как 2021-01-21 00:00:00 , поэтому миллисекунда пропускается. Интересно, почему это изменение? Есть ли способ, чтобы getString() из ResultSet все еще возвращал миллисекунды, это 2021-01-21 00:00:00.0?

ojdbc8 12.2 вернул в этом формате 2021-01-21 00:00:00.0. При обновлении версии это изменение наблюдается.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В Oracle DATE — это двоичный тип данных, хранящийся в виде 7 байтов, представляющих: век, год века, месяц, день, час, минуту и ​​секунды. Все значения являются целыми числами, поэтому НИКОГДА не будет дробных секунд.

Если вам нужны дробные секунды, вам нужно использовать тип данных TIMESTAMP.

Если вы хотите отображать время с долями секунды, вам нужно будет отформатировать дату и явно напечатать ноль дробных секунд (что вы можете сделать, объединив ".0" в свою строку).

С ojdbc8 12.2 ResultSet getString() вернул 2021-01-21 00:00:00.0. С обновлением версии я вижу это изменение.

user2359634 13.01.2023 11:02

@user2359634 user2359634 Похоже, что-то изменилось в том, как драйвер неявно форматирует даты как строки. Вы можете либо продолжать полагаться на неявный формат даты и корректировать свой код при каждом изменении драйвера (в этом случае добавлять ".0" к результату; но если поведение драйвера снова изменится, вам нужно будет снова его исправить), или вы можете поменять местами для явного форматирования даты, и таким образом вы всегда будете знать, какой формат будет.

MT0 13.01.2023 11:07

Последние драйвера имеют правильное поведение. Тип DATE не включает миллисекунды в Oracle. Пожалуйста, обратитесь к документу здесь.

Другие вопросы по теме