mysql jdbc连接器批量更新异常更新计数不如预期
Posted
技术标签:
【中文标题】mysql jdbc连接器批量更新异常更新计数不如预期【英文标题】:mysql jdbc connector batch update exception update count not as expected 【发布时间】:2014-06-10 12:17:52 【问题描述】:我正在使用我的 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:
公共 int[] getUpdateCounts() 回报: 包含已执行更新的更新计数的 int 数组 在此错误发生之前成功。 或者,如果驱动程序在发生错误后继续处理命令,则 批处理中的每个命令如下: - 更新计数 - Statement.SUCCESS_NO_INFO ('-2') - Statement.EXECUTE_FAILED ('-3')问题: 是 MySql 连接器/J 没有正确设置批量第一次执行失败的更新计数,还是我在这里遗漏了什么?有没有人遇到过这样的情况?
我正在使用连接器/J 5.1.30; Ubuntu 12.04 上的 MySQL 5.5.24
【问题讨论】:
听起来是个 bug,也许你应该向 Oracle 提交一张票。 @MarkRotteveel 似乎如此。只是想在我提出罚单之前确认一下。谢谢。 你举报了吗? 【参考方案1】:我发现问题在于“rewriteBatchedStatements=true”连接选项。使用此选项时,会发生报告的问题。将其报告为错误。
【讨论】:
以上是关于mysql jdbc连接器批量更新异常更新计数不如预期的主要内容,如果未能解决你的问题,请参考以下文章
请求处理失败;嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法执行 JDBC 批量更新
Mybatis -- 批量更新 -- updateBatch
mybatis批量插入,批量更新 com.mysql.jdbc.exceptions.MySQLSyntaxErrorException