我的java应用程序试图运行一个插入查询到oracle数据库。我插入的表有一个日期字段,名为last_modified我的查询使用时间戳,同时指望oracle转换为日期字段。每天23:00我得到以下错误
java.lang.RuntimeException: **Assertion botch: negative time**
at
oracle.jdbc.driver.DateCommonBinder.setOracleHMS(OraclePreparedStatement.java:18740)
at
oracle.jdbc.driver.TimestampBinder.bind(OraclePreparedStatement.java:19245)
at
oracle.jdbc.driver.OraclePreparedStatement.setupBindBuffers(OraclePreparedStatement.java:3014)
at
oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:9973)
at
oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213)
我已经检查了时区使用:
SELECT SYSTIMESTAMP, CURRENT_TIMESTAMP, DBTIMEZONE, SESSIONTIMEZONE FROM DUAL;
我得到:05-JUN-13 08.09.29.244232 AM +02:00, 05-JUN-13 08.09.29.244236 AM +02:00, +00:00,+02:00
客户机mochine(我有java应用程序的那个)和数据库机器是同一个。但我仍然得到java.lang.RuntimeException: Assertion botch: negative time
我的问题是:
1.我怎样才能在我的代码中添加一个catch块,以避免每天在23:00重新启动我的应用程序?在我看来,异常是java.lang.RuntimeException
,我不能添加catch(java.lang.RuntimeException e)
,或者我可以吗?
Assertion botch: negative time
是一个Assert吗?我可以用catch (java.lang.AssertionError e)
捕获它吗?
1.我读,在改变linux时区后,我应该在机器上重新启动.直到那时,oracle将不使用新的时区.有没有办法让我知道什么是配置和oracle正在使用的时区?谢谢.
3条答案
按热度按时间l3zydbqr1#
有同样的问题。我们通过使用vm parametr显式设置Java时区来修复它。
这是一个奇怪的bug,当Date对象在另一端是正确的,但当时间福尔斯TZ间隙时仍然是bug。
xienkqul2#
升级连接器的版本。如果您使用的是ojdbc,请更改为较新的版本。我也遇到了同样的问题,我使用的是ojdbc6。在我升级到www.example.com后,一切正常12.1.0.1
mwkjh3gx3#
我同意,使用-Duser.timezone解决了这个问题。每天早结束(23:00 - 23:59),报告的问题出现。
发布环境:java 1.6和odbc 6(没有使用odcb 7的选项,因为没有更新java的选项)
多谢了!