ResultSet#getDate()语义


问题内容

我们从迁移到ojdbc6-11.2.0.3.0ojdbc7-12.1.0.1并观察到ResultSet#getDate()语义上的变化。以前,java.sql.Date根据上指定的合同,通过将小时,分钟,秒和毫秒设置为零,可以对返回的值进行“规范化”
java.sql.Date。与ojdbc7此不再的情况下和java.sql.Date具有小时,分,秒和毫秒根据数据库上的值来设置。

我查看了Javadoc,ResultSet#getDate()但没有明确指出哪种行为是正确的。我会以为旧行为是规范的意图。我对吗?我们遇到驱动程序错误了吗?


问题答案:

这显然是一个错误,因为该类的文档java.sql.Date指出

为了符合SQL DATE的定义,必须通过将与实例相关联的特定时区中的小时,分​​钟,秒和毫秒设置为零,来“标准化”
java.sql.Date实例包装的毫秒值。 。