Вы используете неприятные старые классы, теперь вытесненные java.time-классами.
Вот как следует рекомендация Джона Скита, размещенная в комментарии к Вопросу.
java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют старые неприятные классы времени, такие как java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
. Команда Joda-Time также рекомендует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений.
Большая часть функциональности java.time портирована на Java 6 & 7 в ThreeTen-Backport и далее адаптирована для Android в ThreeTenABP.
OffsetDateTime
Вы можете разобрать, что входную строку в качестве OffsetDateTime
объекта.
OffsetDateTime odt = OffsetDateTime.parse("2016-07-21T21:30:47.492+0000");
Если драйвер JDBC соответствует JDBC 4.2 или более поздней версией, вы можете быть в состоянии передать/выборки в SQL с помощью PreparedStatement::setObject
и ResultSet::getObject
методов. Если нет, перейдите в старый тип java.sql.
Для преобразования требуется объект Instant
. Instant
- это более базовый класс строительного блока в java.time, лишенный гибкости OffsetDateTime
. Класс Instant
представляет собой момент на временной шкале в UTC с разрешением до наносекунд. Извлеките Instant
из этого OffsetDateTime
.
Instant instant = odt.toInstant();
Пропустите Instant
к новому способу добавленного к старому классу java.sql.
java.sql.Timestamp ts = java.sql.Timestamp.from(instant);
Затем вызвать PreparedStatement::setTimestamp
и ResultSet::getTimestamp
методы.
myPreparedStatement.setTimestamp(1 , ts);
…
java.sql.Timestamp ts = myResultSet.getTimestamp(1);
После извлечения в java.sql.Timestamp
, немедленно преобразовать в класс java.time, Instant
. Используйте классы java.sql только в тех случаях, когда в вашем JDBC-драйвере отсутствует прямая поддержка типов java.time, и даже тогда свести к минимуму использование классов java.sql. Работайте в своей бизнес-логике в java.time.
Instant instant = ts.toInstant();
Смешение имен классов
Не путайте два старых Date
классов в комплекте с Java. java.util.Date
представляет собой дату и время суток. A java.sql.Date
предназначен для представления только даты-значения без времени суток (но запутывание на самом деле имеет время суток из-за неуклюжий взлома неудобного класса).
Избегайте java.util.Date
и java.util.Calendar
и java.text.SimpleDateFormat
классов полностью. И минимизируйте использование классов java.sql.Date
/.Time
/.Timestamp
, как описано выше.
Какое программное обеспечение базы данных вы используете? –
Что вы пробовали? Похоже, вы должны в основном разбирать строку, возможно, с помощью 'java.util.Date' или' java.time.Instant', а затем конвертировать в 'java.sql.Timestamp' и использовать это в' PreparedStatement'. –
Жаба для Oracle –