передать LocalTime в PreparedStatement - PullRequest
0 голосов
/ 25 октября 2019

Я хочу передать местное время Java в PreparedStatement (java.sql.) Следующим образом:

ps.setTimestamp(id++, (localtime));

Я не знаю, является ли setTimestamp правильным или мне следует использовать setTime или даже другой. Я не нашел тот, который соответствует местному времени напрямую, так как я могу преобразовать его, чтобы я мог передать его в Preparedstatement?

Ответы [ 2 ]

4 голосов
/ 25 октября 2019

Вы можете использовать java.time классы в PreparedStatement и ResultSet с методами set/getObject, поскольку в настоящее время нет специальных методов для этих типов. Драйвер базы данных должен быть достаточно новым, чтобы поддерживать их.

ps.setObject(1, localtime);
LocalTime loco = rs.getObject(1, LocalTime.class);

Конечно, тип столбца тоже должен быть правильным.

1 голос
/ 25 октября 2019

Существует метод setTime(Time x) в PreparedStatement, и вы можете преобразовать LocalTime в java.sql.Time:

LocalTime localTime = localTime.now();
preparedStatement.setTime(1, Time.valueOf(localTime);

РЕДАКТИРОВАТЬ
Если ваши данныевведите в базу данных DateTime, затем вам нужно будет передать полную метку времени, java.sql.Timestamp, которая также включает информацию о дате, а не только о времени.

Если вы хотите использовать java.timeзатем вы можете использовать LocalDateTime вместо LocalTime и преобразовать его в метку времени (и наоборот):

LocalDateTime now = LocalDateTime.now();
preparedStatement.setTimestamp(1, Timestamp.valueOf(now));

Если в базе данных имеется тип данных DATETIMEстолбец, и вы хотите установить время как LocalTime, используйте LocalDate.now(), чтобы создать экземпляр LocalDateTime с вашим LocalTime, а затем добавить его в качестве параметра запроса:

// use your instance of LocalTime (now() is just an example)
LocalTime timeNow = LocalTime.now();
// get the date of today (or maybe another specific one)
LocalDate today = LocalDate.now();
// combine them
LocalDateTime now = LocalDateTime.of(today, timeNow);
// add the converted combination as parameter
preparedStatement.setTimestamp(1, Timestamp.valueOf(now));
...