我注意到了以下不同之处,但没有看到任何地方都有记录。我在想,其他人是否注意到了同样的事情,或者能告诉我一些证明相同的文档。
环境变化:-
Oracle 11g, JDK 1.6, iBatis, PL/SQL
情景:-
ojdbc14.jar:如果pl/sql返回一个类型为DATE的变量,并且我尝试将其放入java.sql.Date变量中,那么一切都正常。示例:
Date annualDate = (Date) map.get("exam_date");
ojdbc6.jar:如果pl/sql返回一个类型为DATE的变量,并尝试将其放入java.sql.Date变量中,则会得到一个异常:
java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date发布于 2010-07-09 05:14:46
实际上,ojdbc14.jar并没有真正提到驱动程序的真正版本(参见JDBC驱动程序下载),只是它早于Oracle11g。在这种情况下,您应该提供确切的版本。
总之,我想您会在日期和时间戳是怎么回事?中找到一些解释--简而言之,它们改变了9.2个驱动程序和11.1个驱动程序的行为。
这可能解释了您所经历的不同(我建议使用最新版本,即11.2驱动程序)。
发布于 2010-07-09 11:30:13
这些驱动程序名称中的"14“和"6”指的是为它们编写的JVM。如果您仍然在使用JDK1.4,我会说您有一个严重的问题,需要升级。JDK1.4已经远远超过了其有用的支持寿命。它甚至没有仿制药!JDK 6 u21是Oracle/Sun的当前生产标准。如果你还没有的话,我建议你改用它。
发布于 2011-01-21 11:44:35
我也有同样的问题!
在甲骨文网站链接文本中发现
如上所述,11.1驱动程序默认情况下在从数据库读取时将SQL日期转换为时间戳。这一直是正确的做法,而9i的改变是一个错误。11.1名司机已恢复到正确的行为。即使您没有在应用程序中设置V8Compatible,在大多数情况下,您也不会看到任何行为上的差异。如果使用getObject读取日期列,您可能会注意到不同之处。结果将是时间戳而不是日期。由于时间戳是日期的子类,这通常不是问题。您可能会注意到一个不同之处是依赖于从日期到日期的转换来截断时间组件,或者如果对值执行toString。否则,改变应该是透明的。
如果出于某种原因,您的应用程序对此更改非常敏感,并且您只需具有9i-10g行为,则可以设置一个连接属性。将mapDateToTimestamp设置为false,驱动程序将恢复到默认的9i-10g行为和映射日期。
https://stackoverflow.com/questions/3209647
复制相似问题