Mysql JDBC连接器批量更新异常更新计数不符合预期



我使用批量插入从我的Java应用程序到mysql数据库批量数据加载。为了编译失败执行的结果,我们以以下方式处理BatchUpdateException:

<>之前 catch (BatchUpdateException e) { int[] codes = e.getUpdateCounts(); for (int i = 0; i<codes.length; i++) { if (Statement.EXECUTE_FAILED == codes[i]) { lr.recordLoadCount--; //`records` is a List containing the objects which were //added in this batch lr.addFailReason(records.get(i).xmlString()); } } lr.addException(e.getMessage()); } 之前

我正在运行一个所有执行都会失败的情况(表不存在)。所以理想情况下,我将有一个失败的原因添加到每一个记录。

然而,我发现除了第一个记录之外,所有的记录都被添加了。当我调试代码时,我发现代码[0]显示为'-1',而所有其他代码显示为'-3'(即Statement.EXECUTE_FAILED)。

根据Javadocs:

<>之前public int[] getUpdateCounts()返回:一个int数组,包含已执行更新的更新计数在此错误发生之前成功。或者,如果驱动程序在发生错误后继续处理命令,则批处理中的每个命令如下:-更新计数——声明。SUCCESS_NO_INFO("2")——声明。EXECUTE_FAILED (' 3 ')之前

问题:是MySql连接器/J没有为批处理中的第一次执行失败正确设置更新计数,还是我在这里遗漏了一些东西?有人遇到过这样的情况吗?

我使用连接器/J 5.1.30;Mysql 5.5.24

我发现问题是与"rewriteBatchedStatements=true"连接选项。当使用此选项时,就会发生报告的问题。

相关内容

  • 没有找到相关文章

最新更新