我们在使用 statement 的 batch api 时、每 20 条数据作为一个事务提交、如果其中一条数据有问题
我们想知道哪一条数据有问题、那么我们可以通过捕获的 BatchUpdatedException 获取到
我们插入 100 条数据、第 21 条和第 41 条是非法数据、会插入失败的
看看日志打印
看看数据库现在又多少数据了
我们发现它最大化的帮我们插入 39 条数据、只有第 21 条第数据没有插入进去。当然 后面的 60 条都没有插入、因为我们捕获异常之后中断插入了。
不过MySQL和Oracle有所区别:
MySQL会将所有的语句全部执行完,然后数组中成功的返回1,失败的返回其它值,比如-3。
Oracle则是一直执行,当遇到第一个失败的语句就会返回,所以会返回均为1的数组。
例子:批量插入10条数据,第3、6条数据失败
MySQL的batchUpdateException.getUpdateCounts()返回:{1,1,-3,1,1,-3,1,1,1,1}
Oracle的batchUpdateException.getUpdateCounts()返回:{1,1}
所以,Oracle若是第一条数据就失败了,就会返回长度为0的数组
https://blog.csdn.net/qq_44741568/article/details/119089239