使用“java.sql.Date”在DATE类型的列中登记时,根据Oracle JDBC驱动程序的版本不同,可能无法正确处理时间

 
【现象】

使用“java.sql.Date”在DATE类型的列中登记时,根据Oracle JDBC驱动程序的版本不同,可能无法正确处理时间

【原因】

在Oracle JDBC Driver 12.1.0.1及以上版本中,setDate() 的动作已发生更改。因此,使用setDate()时会将时间存储在DATE类型的列中。

  Oracle JDBC Driver 12.1.0.1及以上版本:存储setDate() 的变量中定义的时间
  Oracle JDBC Driver 11.2.0.4及以下版本:驱动程序将时间设置为“00:00:00”

【问题案例】

如果满足以下所有条件,版本升级后可能会受到影响。

*使用Oracle Database 11g及以下版本,随着版本等的升级,Oracle Database将升级到12c及以上版本
*系统属性已设置为“-Doracle.jdbc.mapDateToTimestamp=false”
*在定制和功能添加等独自开发的程序中已使用DATE类型的列

【处理方法】

为了确保可以在DATE类型的列中设置时间,请修改通过定制、添加功能等独自开发的程序。

或者

请将系统属性设置为“-Doracle.jdbc.DateZeroTime=true”。
在Oracle JDBC Driver 12.1.0.1以及12.1.0.2中,通过应用Patch 19297927可以使用此属性。

详细信息请访问Oracle公司的支持网站。

 -- 适用对象 ----------------------------------------------------------------
iAP/Accel Platform/所有更新
 --------------------------------------------------------------------------------


FAQID:1123
这篇文章有帮助吗?
0 人中有 0 人觉得有帮助
由 Zendesk 提供技术支持