发现批量更新的哪些记录失败

时间:2016-02-08 11:23:35

标签: java database jdbc

我使用jdbc在java中批量更新1000条记录。其中800条记录成功更新,200条记录。所以我想从批量更新查询检查所有200条记录都未能更新,我将使用批量插入将它们插入数据库。我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:2)

来自executeBath()

Statement方法返回一个整数数组(每个命令执行一个整数)。每个整数表示更新计数。如果为1或更高,则更新成功完成;如果为0,则没有使用其各自的命令更新记录。

示例:

List<YourClass> objectsToUpdate = getObjectsToUpdate();

for (YourClass object : objectsToUpdate) {
    String updateCommand = generateUpdateCommand(object);
    statement.addBatch(updateCommand);
}
int[] results = statement.executeBatch();

List<YourClass> notUpdated = new ArrayList<YourObject>();

for (int i = 0; i < results.length; i++) {
    if (results[i] == 0) {
        notUpdated.add(objectsToUpdate.get(i));
    }
}

那只是为了演示算法。请考虑使用PreparedStatement代替Statement

答案 1 :(得分:0)

为了完整起见,说使用批量更新时,JDBC驱动程序也可能返回(作为整数数组的一部分)Statement.SUCCESS_NO_INFO(当没有关于更新行的信息可用时)或Statement时,也很重要.EXECUTE_FAILED(发生异常时)

如果发生异常,某些JDBC驱动程序甚至可能会停止执行进一步的语句(更新)。