我正在尝试为任何jdbc获取正确数量的插入行(使用批处理和预准备语句)。 现在我知道两种方式:
PreparedStatement.getUpdateCount()
- 但对于批次,即使每一行都被拒绝,此方法也会为每个批次返回1.
int[]
作为PreparedStatement.executeBatch()
的结果并检查每个元素是否大于0.但对于某些jdbcs(例如Oracle),此数组可能包含每个记录的-2。 / p>
那么,有没有办法知道成功插入行的数量?
答案 0 :(得分:2)
关于批量更新计数:
您的第二个选择是要走的路,但是您已经观察到一些JDBC驱动程序并不打算完全实现此功能。
更新计数-2 = Statement.SUCCESS_NO_INFO
表示命令已成功处理,但受影响的行数未知。
(值-3 = Statement.EXECUTE_FAILED
表示命令无法成功执行,只有在命令失败后驱动程序继续处理命令时才会发生。
如果您只有简单的INSERT,则可以将-2重新解释为成功的+1插入记录。 (如果批量更新抛出BatchUpdateException
,则需要在异常中评估更新计数。对于像INSERT FROM SELECT
这样的其他情况,似乎你运气不好或者需要依赖于特定于驱动程序的API。