【现象】
使用“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
使用“java.sql.Date”在DATE类型的列中登记时,根据Oracle JDBC驱动程序的版本不同,可能无法正确处理时间