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

时间:2014-06-10 12:17:52

标签: java mysql jdbc batch-updates

我正在使用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()

Returns:
an array of int containing the update counts for the updates that were executed
successfully before this error occurred. 

Or, if the driver continues to process commands after an error, one of the 
following for every command in the batch:

 - an update count
 - Statement.SUCCESS_NO_INFO ('-2')
 - Statement.EXECUTE_FAILED ('-3')

问题: 难道MySql connector / J没有为批量中的第一次执行失败正确设置更新计数,或者我在这里遗漏了什么?有没有人遇到任何这种情况?

我正在使用connector / J 5.1.30; Ubuntu 12.04上的Mysql 5.5.24

1 个答案:

答案 0 :(得分:0)

我发现问题在于“rewriteBatchedStatements = true”连接选项。使用此选项时,会报告所报告的问题。将其报告为错误。