tl; dr
Никогда не используйте старые ужасные устаревшие классы даты и времени, такие как java.sql.Date
, java.util.Date
, Calendar
и `SimpleDateFormat.Используйте их замену, современные java.time классы.
myPreparedStatement.setObject( … , LocalDate.parse( "2018-11-08" ) )
… и…
LocalDate localDate = myResultSet.getObject( … , LocalDate.class ) ;
java.time
Ответ Крума является правильным, за исключением того, что он использует ужасный класс java.sql.Date
, который устарел много лет назад с принятием JSR 310 .Как указано в этом ответе, вы должны использовать умные объекты, а не тупые строки для обмена значениями даты и времени с вашей базой данных.
Давайте настроим код , представленный Krum .Два изменения: (a) Заменить устаревшие классы современными и (b) разобрать строку ввода отдельно в случае неправильного ввода.
java.time.LocalDate localDate = null ; // Use the modern `java.time.LocalDate` class that years ago supplanted the terribly-designed `java.sql.Date` class.
try {
localDate = LocalDate.parse( "2018-11-08" ) ; // The java.time classes by default know how to parse strings in standard ISO 8601 format such as seen here.
} catch ( DateTimeParseException e ) {
… // Deal with invalid input string.
}
try {
currentCon = ConnectionManager.getConnection() ;
PreparedStatement stmt = currentCon.prepareStatement( searchQuery ) ;
stmt.setObject(1, localDate ) ; // As of JDBC 4.2, we can directly exchange java.time objects with a database via the `setObject` and `getObject` methods.
stmt.executeUpdate( searchQuery ) ;
} catch (SQLException e) {
e.printStackTrace() ;
}
И для извлечения.
LocalDate localDate = myResultSet.getObject( … , LocalDate.class ) ;
О java.time
Фреймворк java.time встроен в 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?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Вы можете найти здесь несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .