jdbc insert使用批量获取成功插入的行数

时间:2017-05-17 09:44:04

标签: java jdbc prepared-statement batch-processing

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

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

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

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

1 个答案:

答案 0 :(得分:2)

关于批量更新计数:

您的第二个选择是要走的路,但是您已经观察到一些JDBC驱动程序并不打算完全实现此功能。

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

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

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