我的 java 应用程序正在尝试对 oracle DB 运行插入查询。我要插入的表有一个名为 last_modified 的 DATE 字段,我的查询使用时间戳,同时依靠 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 应用程序的那个)和 DB 机器是同一个。但我仍然得到java.lang.RuntimeException: Assertion botch: negative time
我的问题是:
如何在我的代码中添加一个 catch 块,以避免每天 23:00 重新启动我的应用程序?在我看来,例外是一个
java.lang.RuntimeException
,我不能添加catch(java.lang.RuntimeException e)
或者我可以吗?是
Assertion botch: negative time
一个断言吗?我可以抓住它catch (java.lang.AssertionError e)
吗?- 我读到,在更改 linux 时区后,我应该在机器上重新启动。在那之前,oracle 不会使用新的时区。有没有办法让我知道配置了什么以及 oracle 正在使用什么时区?谢谢。