私の Java アプリケーションは、Oracle DB への挿入クエリを実行しようとしています。私が挿入しようとしているテーブルには、last_modified という名前の DATE フィールドがあります。私のクエリでは Timestamp を使用しますが、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
私の質問は次のとおりです。
毎日 23:00 にアプリケーションを再起動する必要をなくす catch ブロックをコードに追加するにはどうすればよいですか? 例外は であり、
java.lang.RuntimeException
追加できcatch(java.lang.RuntimeException e)
ないか、追加できますか?Assertion botch: negative time
アサーションですか?を使用してキャッチできcatch (java.lang.AssertionError e)
ますか?- Linuxのタイムゾーンを変更した後、マシンで再起動を実行する必要があることを読みました。それまでは、オラクルは新しいタイムゾーンを使用しません。構成されているものとオラクルが使用しているタイムゾーンを知る方法はありますか? ありがとう。