2016-04-04 15 views
0

jdbcを自動コミットオフで使用します。そして、ユニークなインデックスを持つテーブルがあります。 Connection#commitでは制約違反例外が発生し、PreparetStatement#executeでは発生しない可能性があります。制約違反例外発生時

私の場合(Oracle)、「実行」では常に発生します。 データベースに依存しますか?

+0

奇妙な質問です。あなたは正確に何を知る必要がありますか? DB側で変更が実行されたときに実行されると、例外が発生します。そのとおりです。バッチ更新の場合、後で発生する可能性があります(すべての変更がDBに送信されたとき) – StanislavL

答えて

2

通常、コミット時ではなくコマンドを実行すると、制約が評価されます。

しかし、SQLには制約を定義する機能があります。DEFERRABLE:トランザクションが完了した時点で整合性チェックを延期できます。

Oracleでは、この動作は、制約定義内のDEFERRABLE句とSET CONSTRAINTS DEFERREDコマンドで実現できます。

+0

Nitpick:制約がDEFERRABLEと宣言されている場合、それは遅延可能です。つまり***可能です***それらはコミット時にチェックされますが、(宣言にINITIALLY DEFERREDなどが含まれていない場合は)すぐにチェックされる場合もあります。 –

+0

@ErwinSmoutあなたは正しいです、言葉を変えて能力を表現する – wero

関連する問題