为了在数据库中表示日期2015-09-13,我们被迫选择一个时区,将该时区中的字符串“
2015-09-13T00:00:00.000”解析为java.util.Date以获取毫秒数。值,然后从该毫秒值构造一个java.sql.Date,最后在准备好的语句上调用setDate(),传递一个Calendar,该Calendar保存所选时区,以便JDBC驱动程序能够正确地重新计算日期2015-09从该毫秒值开始为-13
为什么?刚打电话
Date.valueOf("2015-09-13"); // From StringDate.valueOf(localDate); // From java.time.LocalDate该行为将是所有JDBC驱动程序中的正确行为:没有时区的本地日期。逆运算为:
date.toString(); // To Stringdate.toLocalDate(); // To java.time.LocalDate
您永远不应依赖
java.sql.Date的依赖
java.util.Date,并且事实也因此依赖于它继承了
java.time.Instantvia
Date(long)或
Date.getTime()
因此,难道我们没有错过一个巨大的机会来清理JDBC中的混乱情况,同时仍保持向后兼容性吗?[…]
这取决于。在JDBC
4.2规范指定,你是能够结合
LocalDate通过类型
setObject(int,localDate),并获取一条
LocalDate通过型
getObject(int,LocalDate.class)驱动程序是否做好准备。
default当然,不像您建议的那样正式的方法那么优雅。



