JDBC 使用批量获取成功插入的行数进行插入



我正在尝试为任何jdbc获取正确数量的插入行(使用批处理和预准备语句(。现在我知道两种方法:

  1. PreparedStatement.getUpdateCount() - 但对于批处理,此方法为每个批次返回 1,即使每一行都被拒绝。

  2. int[]作为PreparedStatement.executeBatch()的结果,并检查每个元素是否大于 0。但是对于某些 jdbc(例如 Oracle(,此数组可以包含每条记录的 -2。

那么,有没有办法知道成功插入的行数?

关于批量更新计数:

您的第二种选择是要走的路,但正如您已经观察到的那样,一些 JDBC 驱动程序不会费心完全实现此功能。

更新计数为 -2 = Statement.SUCCESS_NO_INFO 表示已成功处理命令,但受影响的行数未知。

(值 -3 = Statement.EXECUTE_FAILED 表示命令无法成功执行,并且仅在命令失败后驱动程序继续处理命令时才会发生(。

如果您只有简单的 INSERT,则可以将 -2 重新解释为成功的 +1 插入记录。(如果批量更新引发BatchUpdateException则需要在异常中评估更新计数(。否则,对于其他情况(例如INSERT FROM SELECT,您似乎不走运或需要依赖特定于驱动程序的 API。

最新更新