Как я могу получить значение типа «дата» ввода из HTML-формы в переменную Java и формат даты SQL? - PullRequest
0 голосов
/ 19 сентября 2018

Я попытался получить значение типа ввода html "date", используя request.getParameter () в классе сервлета, преобразовал его в дату Java в классе JDBC, затем в формат даты sql.

но есть это исключение

Это код сервлета для получения значения со страницы HTML

String bDate = request.getParameter("BirthDate");

Это код класса JDBC для его преобразования

String bbd = user.getBDate();
DateFormat df = new SimpleDateFormat("dd/MM/yyy");
java.util.Date bbDate = df.parse(bbd);;
java.sql.Date bDate = new java.sql.Date(bbDate.getTime());

1 Ответ

0 голосов
/ 19 сентября 2018

tl; dr

myPreparedStatement.setObject(                       // As of JDBC 4.2, pass java.time objects to your database.
    … ,
    LocalDate                                        // Represent a date-only value, without time-of-day and without time zone.
    .parse(                                          // Convert text to a `LocalDate` object.
        "23/01/2018" ,
        DateTimeFormatter.ofPattern( "dd/MM/uuuu" )  // Specify formatting pattern to match user input.
    )                                                // Returns a `LocalDate` object.
)

java.time

Использовать только java.time классы.Никогда не используйте java.util.Date, java.sql.Date, Calendar, SimpleDateFormat и т. Д.

String input = "23/01/2018" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;

Начиная с JDBC 4.2, мы можем напрямую обмениваться java.time объектами сбаза данных.

myPreparedStatement.setObject( … , ld ) ;

Извлечение.

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

О java.time

Java.time Framework встроен в Java 8 и более поздние версии.Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Вы можете обмениваться java.time объектами непосредственно с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большая часть функций java.time перенесена на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии пакетов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .

ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

...