如何在ibatis中的SqlExecutor中设置statementList属性或多个子批



我使用的是ibatis-sqlmap-2.3.0版本,需要在表中插入大约70K行。

使用SqlExecutorBatch功能,我还想知道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:1号子批次失败。"

索引1是错误的,因为我知道其他行有重复的条目。

原因:我检查了这个jar的代码,它只考虑由我的所有executor.insert("ratesUtil.insertAreaData",ar1)组成的单个语句;

因此索引为1。

输出供您参考:

1) System.out.println("失败异常"+e.getFailingqlStatement());--插入表中的值(?,?,?)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。

您可以添加多个批处理,而不是在一个批处理中使用一个adding all语句。这会让你知道哪一批给了你问题。但这并不是你问题的实际答案,只是

最新更新