Я использую 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. При обновлении версии это изменение наблюдается.




В Oracle DATE — это двоичный тип данных, хранящийся в виде 7 байтов, представляющих: век, год века, месяц, день, час, минуту и секунды. Все значения являются целыми числами, поэтому НИКОГДА не будет дробных секунд.
Если вам нужны дробные секунды, вам нужно использовать тип данных TIMESTAMP.
Если вы хотите отображать время с долями секунды, вам нужно будет отформатировать дату и явно напечатать ноль дробных секунд (что вы можете сделать, объединив ".0" в свою строку).
@user2359634 user2359634 Похоже, что-то изменилось в том, как драйвер неявно форматирует даты как строки. Вы можете либо продолжать полагаться на неявный формат даты и корректировать свой код при каждом изменении драйвера (в этом случае добавлять ".0" к результату; но если поведение драйвера снова изменится, вам нужно будет снова его исправить), или вы можете поменять местами для явного форматирования даты, и таким образом вы всегда будете знать, какой формат будет.
Последние драйвера имеют правильное поведение. Тип DATE не включает миллисекунды в Oracle. Пожалуйста, обратитесь к документу здесь.
С ojdbc8 12.2 ResultSet getString() вернул 2021-01-21 00:00:00.0. С обновлением версии я вижу это изменение.