我使用jdbc在java中批量更新1000条记录。其中800条记录成功更新,200条记录。所以我想从批量更新查询检查所有200条记录都未能更新,我将使用批量插入将它们插入数据库。我怎么能实现这个目标?
答案 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驱动程序甚至可能会停止执行进一步的语句(更新)。