Т.Л., д-р
myPreparedStatement.setObject(
… ,
LocalDate.parse(
"01/01/1900" ,
DateTimeFormatter.ofPattern("dd/MM/uuuu")
)
)
Подробности
Answer by Just another Java programmer правильно.
Кроме того, вы не должны использовать строки для передачи значений даты и времени с помощью базы данных. Используйте классы времени.
Современный способ - это классы java.time, вытесняющие неудобные устаревшие классы времени.
LocalDate
LocalDate
класс представляет собой дату только значение без времени суток и без временной зоны.
Часовой пояс имеет решающее значение для определения даты. В любой данный момент дата изменяется по всему миру по зонам. Например, через несколько минут после полуночи в Paris France - это новый день, пока еще «вчера» в Montréal Québec.
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
Вы можете анализировать непосредственно из строки в стандартном формате ISO 8601.
LocalDate localDate = LocalDate.parse("2016-01-23");
Или укажите каждую деталь.
LocalDate localDate = LocalDate.of(2016, Month.JANUARY , 23);
Чтобы разобрать другие форматы, используйте DateTimeFormatter
класс.Поиск переполнения стека для многих примеров.
Database
Если JDBC driver соответствует JDBC 4.2 или позже, он должен быть в состоянии передать тип java.time с PreparedStatement::setObject
и принести с ResultSet::getObject
.
myPreparedStatement.setObject(… , localDate);
... или ...
myPreparedStatement.setObject(… , localDate , JDBCType.DATE);
Если ваш драйвер не так включен, падение назад к использованию java.sql.Date
. Этот неудобный класс претендует на то, чтобы представлять значение только для даты (но на самом деле имеет компонент времени, установленный в полночь, который мы должны игнорировать). Чтобы преобразовать в/из java.time, посмотрите на новые методы, добавленные в старые классы.
java.sql.Date sqlDate = java.sql.Date.valueOf(localDate);
И переход в другую сторону.
LocalDate localDate = sqlDate.toLocalDate();
Перейдите на страницу PreparedStatement::setDate
.
myPreparedStatement.setDate(… , sqlDate);
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, теперь в maintenance mode, советует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 и SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
- Проект ThreeTenABP адаптирует ThreeTen-Backport (как упоминалось выше) для Android специально.
- См. How to use….
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
Вы можете показать нам часть своего кода, которая на самом деле пытается написать SQL-код – alainlompo
@alainlompo: row = new STRUCT (myNewRon, getConnection(), атрибуты); – sTg