将 LocalTime 传递给 PreparedStatement

pass LocalTime to PreparedStatement

我想将 java 本地时间传递给 PreparedStatement (java.sql.),如下所示:

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

我不知道 setTimestamp 是否正确,或者我是否应该使用 setTime 甚至另一个。我没有找到直接适合本地时间的,所以我如何转换它以便我可以将它传递给 Preparedstatement?

您可以在 PreparedStatementResultSet 中使用 java.time 类 和 set/getObject 方法,因为(目前)没有针对这些类型的特定方法.数据库驱动程序也需要足够新以支持这些。

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

列类型当然也需要正确。

PreparedStatement中有方法setTime(Time x),你可以将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));