私は ibatis-sqlmap-2.3.0 バージョンを使用しており、テーブルに約 70K 行を挿入する必要があります。
SqlExecutor Batch 機能を使用して、executeBatch(); の途中で失敗したステートメントのインデックスも知りたいです。
以下は同じコードです。
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
executor.startBatch();
try {
for (TableRow ar1 : AllRows) {
executor.insert("myRates.insertData", ar1);
}
aBatchList = executor.executeBatchDetailed();
} catch (BatchException e) {
e.printStackTrace();
System.out.println("failing exception " + e.getFailingSqlStatement());
System.out.println("failing statement id " + e.getFailingStatementId());
System.out.println("message exception is " + e.getMessage());
System.out.println(e.getSuccessfulBatchResults());
}
}
問題: 失敗の結果が来ると、「om.ibatis.sqlmap.engine.execution.BatchException: Sub batch number 1 failed.」というメッセージが表示された重複データのエラーが表示されます。
重複したエントリが他の行にあることがわかっているため、インデックス 1 は間違っています。
理由: この jar のコードを確認したところ、すべての executor.insert("ratesUtil.insertAreaData", ar1); で構成される単一のステートメントのみが考慮されます。
したがって、インデックスは 1 です。
参照用の出力:
1) System.out.println("失敗した例外" + e.getFailingSqlStatement()); -- テーブル値に挿入 (?,?,?) 2)System.out.println("失敗したステートメント ID " + e.getFailingStatementId()); 3)System.out.println("メッセージ例外は" + e.getMessage()); -- サブバッチ番号 1 が失敗しました。4)System.out.println(e.getSuccessfulBatchResults()); - ヌル
1)これらの挿入クエリを単一のexecutorで複数のバッチステートメントとして設定し、これらすべてのバッチステートメントを単一のexecutor.executeBatch()で実行するにはどうすればよいですか。
2) 失敗したステートメントの正しいインデックスを取得する他の方法はありますか。
プロジェクト構成の問題により、バージョンを変更できません。また、updateCount にも依存したくありません。