将 LocalTime 传递给 PreparedStatement
pass LocalTime to PreparedStatement
我想将 java 本地时间传递给 PreparedStatement (java.sql.),如下所示:
ps.setTimestamp(id++, (localtime));
我不知道 setTimestamp
是否正确,或者我是否应该使用 setTime
甚至另一个。我没有找到直接适合本地时间的,所以我如何转换它以便我可以将它传递给 Preparedstatement?
您可以在 PreparedStatement
和 ResultSet
中使用 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));
我想将 java 本地时间传递给 PreparedStatement (java.sql.),如下所示:
ps.setTimestamp(id++, (localtime));
我不知道 setTimestamp
是否正确,或者我是否应该使用 setTime
甚至另一个。我没有找到直接适合本地时间的,所以我如何转换它以便我可以将它传递给 Preparedstatement?
您可以在 PreparedStatement
和 ResultSet
中使用 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));