【发布时间】: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 似乎如此。只是想在我提出罚单之前确认一下。谢谢。
-
你举报了吗?
标签: java mysql jdbc batch-updates