2009-05-22 6 views
2

私はaddBatchで追加されたたくさんのバッチステートメントを持つjava.sql.Statementを持っています。 executeBatchを実行すると、最初のステートメントの後にBatchUpdateExceptionがスローされ、データベースの制約に違反し、残りのステートメントをすべてバッチで実行することはありません。すべてのステートメントをバッチで実行して、間違ったステートメントを無視する方法はありますか?すべての誤ったステートメントを無視して、JDBC executeBatchですべてのステートメントを実行するには?

答えて

1

同様の質問と回答については、BatchUpdateException: the batch will not terminateを参照してください。

バッチは、例外がスローされた瞬間に終了すると言います。あなたは良いものだけを実行することはできません。

2

もっと良い解決策は、間違ったものを修正することだと思います。どうしましたか? SQL?基礎となるテーブル?データ?

例外は「例外的」であると考えられます。どのような状況がよくあるので、このバッチでもっと頻繁に見られるでしょうか?

例外は何かが間違っていることを伝えています。私はあなたがメッセージを無視することを可能にする修正を推奨したくありません。スローされた例外がある場合は、catchブロックの根本的な問題を改善する機会があることを意味します。

バッチ内の各ステートメントをループする場合は、個々のステートメントから個別に例外をキャッチし、エラーをログに記録するだけです。完全に無視しないでください。

しかし、別の復旧戦略を考えることができない限り、あなたは不運です。

0

よく挿入することができたすべてのデータを保存する場合は、コミットを実行して保存してください。

バッチ内の各ステートメントをループすることはできません。実行バッチを呼び出す場合にのみ、各ステートメント(addbatch)ではなく例外が発生するため、エラーの場所を正確に見つけることはできませんそれらの一部を保存することも、何もしないこともできます(コミットまたはロールバック)。

関連する問題