我的Java應用程序正試圖運行一個插入查詢到oracle數據庫。 我插入的表有一個DATE字段,名爲last_modified 我的查詢使用時間戳,同時指望oracle將其轉換爲日期字段。 每天23:00我碰到下面的錯誤Assertion botch:負面時間oracle 11
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
我的問題是:
我如何添加到我的代碼catch塊,這將避免需要每天重新啓動我的應用程序在23:00?在我看來,例外是
java.lang.RuntimeException
,我不能添加catch(java.lang.RuntimeException e)
或我可以嗎?是
Assertion botch: negative time
一個斷言?我可以用catch (java.lang.AssertionError e)
來捕捉它嗎?- 我讀過,更改linux時區後,我應該在機器上運行重新啓動。直到那時oracle纔會使用新的時區。有沒有辦法讓我知道什麼是配置和什麼時區甲骨文使用? 謝謝。
您的錯誤未完全粘貼。你不應該捕獲'RuntimeException's。你能顯示一些代碼嗎? – fge
我不會推薦任何try/catch塊,因爲這將是一個骯髒的補丁。你應該找出發生這種情況的真正原因,也許發佈錯誤發生的代碼塊。我在想,你可能會有一些時間轉換,但這並沒有做好它的工作。 – Martin
對不起,我無法粘貼我的代碼,但我所做的只是將java Timestamp類插入到oracle Date字段中。 – Oded