PrepareStatement 也是接口,PrepareStatement extends Statement,PrepareStatement 本身没有 int[] executeBatch() throws SQLException 方法,而是继承了Statement的方法,且它们都是接口没有实际实现方法,但Statement接口对executeBatch()方法做了规范:
将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的int
元素的排序对应于批中的命令,批中的命令根据被添加到批中的顺序排序。方法executeBatch
返回的数组中的元素可能为以下元素之一:
- 大于等于 0 的数 – 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数
SUCCESS_NO_INFO
的值 – 指示成功执行了命令,但受影响的行数是未知的如果批量更新中的命令之一无法正确执行,则此方法抛出
BatchUpdateException
,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。如果驱动程序在某一次失败后继续进行处理,则BatchUpdateException.getUpdateCounts
方法返回的数组将包含的元素与批中存在的命令一样多,并且其中至少有一个元素将为:EXECUTE_FAILED
的值 – 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现
所以,判断是否执行成功时,不仅要判断返回值是否 >=0,而且需要判断是否 ==Statement.SUCCESS_NO_INFO
(即:-2)
另外:
如果使用executeBatch()但没有开启手动提交事务,如果你是自动提交事务那么可能会导致批量加入的SQL语句每执行一条就提交一次事务,导致时间全部浪费在这里了。所以可以通过手动提交事务,等executebatch执行了 然后提交事务。conn.setAutoCommit = false;//……………代码conn.commit();以提高代码执行效率。
今天的文章Java中executeBatch()返回值为-2「建议收藏」分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/57920.html