0

私は 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 にも依存したくありません。

4

1 に答える 1