Java中executeBatch()返回值为-2「建议收藏」

Java中executeBatch()返回值为-2「建议收藏」PrepareStatement也是接口,PrepareStatementextendsStatement,PrepareStatement本身没有int[]executeBatch()throwsSQLException方法,而是继承了Statement的方法,且它们都是接口没有实际实现方法,但Statement接口对executeBatch()方法做了规范:将一批命令提交

Java中executeBatch()返回值为-2「建议收藏」

PrepareStatement 也是接口,PrepareStatement extends Statement,PrepareStatement 本身没有 int[] executeBatch() throws SQLException 方法,而是继承了Statement的方法,且它们都是接口没有实际实现方法,但Statement接口对executeBatch()方法做了规范:

将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的
int 元素的排序对应于批中的命令,批中的命令根据被添加到批中的顺序排序。方法
executeBatch 返回的数组中的元素可能为以下元素之一:

  1. 大于等于 0 的数 – 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数
  2. SUCCESS_NO_INFO 的值 – 指示成功执行了命令,但受影响的行数是未知的

    如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。如果驱动程序在某一次失败后继续进行处理,则 BatchUpdateException.getUpdateCounts 方法返回的数组将包含的元素与批中存在的命令一样多,并且其中至少有一个元素将为:

  3. EXECUTE_FAILED 的值 – 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现

所以,判断是否执行成功时,不仅要判断返回值是否 >=0,而且需要判断是否 ==Statement.SUCCESS_NO_INFO(即:-2)

另外:

如果使用executeBatch()但没有开启手动提交事务,如果你是自动提交事务那么可能会导致批量加入的SQL语句每执行一条就提交一次事务,导致时间全部浪费在这里了。所以可以通过手动提交事务,等executebatch执行了 然后提交事务。conn.setAutoCommit = false;//……………代码conn.commit();以提高代码执行效率。

今天的文章Java中executeBatch()返回值为-2「建议收藏」分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/57920.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注