2

私の 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

私の質問は次のとおりです。

  1. 毎日 23:00 にアプリケーションを再起動する必要をなくす catch ブロックをコードに追加するにはどうすればよいですか? 例外は であり、java.lang.RuntimeException追加できcatch(java.lang.RuntimeException e)ないか、追加できますか?

  2. Assertion botch: negative timeアサーションですか?を使用してキャッチできcatch (java.lang.AssertionError e)ますか?

  3. Linuxのタイムゾーンを変更した後、マシンで再起動を実行する必要があることを読みました。それまでは、オラクルは新しいタイムゾーンを使用しません。構成されているものとオラクルが使用しているタイムゾーンを知る方法はありますか? ありがとう。
4

2 に答える 2