BatchUpdateException 问题

我们在使用 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值