首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >断言拙劣:负时间预言11

断言拙劣:负时间预言11
EN

Stack Overflow用户
提问于 2013-06-05 11:12:43
回答 2查看 5.7K关注 0票数 2

我的java应用程序正在尝试运行对oracle DB的插入查询。我要插入的表有一个名为last_modified的日期字段,我的查询使用时间戳,同时依靠oracle将其转换为DATE字段。每天23:00,我会收到以下错误

代码语言:javascript
复制
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)

我使用以下方法检查了时区:

代码语言:javascript
复制
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应用程序的客户机)和DB机器是相同的。但我还是得到了java.lang.RuntimeException: Assertion botch: negative time

我的问题是:

  1. 如何在代码中添加一个catch块,以避免每天23:00重新启动应用程序?在我看来,例外是java.lang.RuntimeException,我不能添加catch(java.lang.RuntimeException e),或者可以吗?
  2. Assertion botch: negative time是一种断言吗?我能用catch (java.lang.AssertionError e)抓到它吗?
  3. 我读到,在更改linux时区之后,我应该在机器上重新启动。在此之前,先知将不再使用新的时区。有什么方法可以让我知道神谕使用的是什么配置和使用什么时区?谢谢。
EN

回答 2

Stack Overflow用户

发布于 2015-03-10 09:47:30

也有同样的问题。我们通过使用vm显式设置Java时区来修正它。

代码语言:javascript
复制
-Duser.timezone=<yourTZ>

这是一个奇怪的错误,当日期对象在另一端是正确的,但是当时间落在TZ间隙时仍然是错误。

票数 1
EN

Stack Overflow用户

发布于 2017-02-14 10:32:28

升级连接器的版本。如果您使用的是ojdbc,请更改为新版本。我也有同样的问题,我使用的是ojdbc6。在我升级到12.1.0.1之后一切都很好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16938424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档