stmt.executeBatch() ステートメントからこの BatchUpdateException を取得しています。
BatchUpdateException: A resultset was created for update
インターネットには、この例外メッセージに関する情報がありません。どういう意味ですか?トレースバックには、ストアド プロシージャが失敗したこと以外に役立つ情報は含まれていません。
stmt.executeBatch() ステートメントからこの BatchUpdateException を取得しています。
BatchUpdateException: A resultset was created for update
インターネットには、この例外メッセージに関する情報がありません。どういう意味ですか?トレースバックには、ストアド プロシージャが失敗したこと以外に役立つ情報は含まれていません。
addBatch()
このメッセージは、追加した SQL ステートメントが を生成したことを意味すると解釈します。ResultSet
これは、通常のINSERT
,UPDATE
またはDELETE
ステートメントではないことを意味します。
結果を返す必要があるステートメントは、JDBC ではバッチで実行できません。
JDBCチュートリアル(「バッチ更新例外の処理」という見出しの下)はそれを確認します:
(1) バッチに追加した SQL ステートメントの 1 つが結果セット (通常はクエリ) を生成する場合、または (2) バッチ内の SQL ステートメントの 1 つが正常に実行されない場合、executeBatch メソッドを呼び出すと、BatchUpdateException が発生します。他の理由で。
ここでケース1に遭遇しているようです。
バッチ更新は、データベースによって一緒に処理されるいくつかの挿入/更新/削除ステートメントです。これは通常、パフォーマンス上の理由から行われます。1x 1000 インサートは、1000x 1 インサートよりもはるかに高速です。BatchUpdateException は、制約違反のために 1 つ (またはそれ以上) のステートメントが最も頻繁に失敗したことを意味します。ストアド プロシージャが何を行っているかを確認するには、ストアド プロシージャを調べる必要があります。おそらく、あなたのデータベース管理者が、何がうまくいかなかったのかについてより多くの情報を提供してくれるでしょう。
テーブルから 1 つの列を削除しました。そのテーブルにレコードを挿入しようとすると、BatchUpdateException が発生しました。
以下のコマンドを実行した後、問題は解決しました
REORG TABLE TABLE_NAME