小编Wou*_*ter的帖子

OJBC客户端升级后更改了java.sql.Date的行为

在将OJDBC客户端从版本11.2.0升级到12.1.0之后,我在将java.sql.Date对象绑定到PreparedStatement时遇到了不同的行为.

在准备好的语句中,主变量"f.plan_date =?" 应该与java.util.Date对象的值绑定,作为在代码中其他地方获得的输入.Oracle表中的列数据类型为"DATE",只应考虑日期部分 - 时间无关紧要.

我通过以下方式在java.sql.Date对象中翻译了java.util.Date对象: statementRegisterJobs.setDate(3, new java.sql.Date(planDate.getTime()));

这对11.2.0客户端运行良好.但是,升级到12.1.0之后,事情往往会出错.不再检索任何记录.经过几个小时的调试,我发现问题与日期变量有关.以下工作方式给了我记录: statementRegisterJobs.setDate(3, java.sql.Date.valueOf("2014-08-21"));

有人可以澄清这种行为吗?java.util.Date对象最终可以有一个时间组件,我有一种未定义的感觉,这可能会以某种方式与问题相关.另一方面,以下项目应该争论在java.sql.Date中忽略时间组件,无论对象是如何构造的......

  • 在java.sql.Date的Java 6 API中,我发现了以下语句:"不推荐使用此方法,因为SQL Date值没有时间组件,所以不应使用此方法." (方法'getHours()').因此,这意味着在将java.util.Date转换为java.sql.Date时忽略时间方面.
  • 这由构造函数文档中的信息确认:"使用给定的毫秒时间值构造Date对象.如果给定的毫秒值包含时间信息,则驱动程序将时间组件设置为默认时区中的时间(时间)运行应用程序的Java虚拟机的区域,对应于零GMT."
  • 而且,我无法从java.sql.Date对象中获取可能的时间方面:toString()只给出了日期,getHours()抛出异常.
  • 这如何与JDBC客户端中的更新相关?

感谢任何想法:)非常感谢您提前.

java sql oracle date ojdbc

8
推荐指数
1
解决办法
1416
查看次数

标签 统计

date ×1

java ×1

ojdbc ×1

oracle ×1

sql ×1