要进行 JDBC 查询,我需要将日期传递给它。日期保存在PostgreSql 数据库的Date
字段类型中,表示特定的日期,没有任何时间。
因为我只需要日期,所以我决定使用仅代表没有时间的日期的特定对象,它LocalDate
来自 Joda-Time 包。我认为这很重要,因为如果我使用 DateTime 对象,它将携带冗余时间数据,并且当时钟向后一小时时,它可能会导致夏令时结束时出现错误(尽管这种情况史无前例,但并非如此不可能的)。
但是当我开始尝试LocalDate
用可接受的preparedStatement.setDate
方法参数来平方对象时,我没有找到合适的方法来做到这一点。
setDate
接受java.sql.Date
作为参数。构造对象的唯一选择java.sql.Date
是以毫秒为单位传递时间。
但这违背了使用LocalDate
Joda-Time 包的所有目的,因为在此转换中我们回到毫秒,当这些转换发生时,时钟可能会延迟一小时并将日期更改为前一个日期。
所以,现在我的代码中有这一行:
preparedStatement.setDate(1, new java.sql.Date(localDate.toDate().getTime()));
但这是转换LocalDate
为接受setDate
格式的最佳方式吗?
我对夏令时和相应的时钟变化的担忧是否合理?
有没有更好的方法将日期(并且只有没有时间的日期)传递给 JDBCpreparedStatement?