shengligan 2009-10-17 10:30
浏览 324
已采纳

关于调用addbatch 批量执行sql的疑问

大家好啊,最近遇到一个很头疼的问题,在调用addbatch批量执行sql的时候 批量操作不同的表,一般情况下都没有问题,为什么有时候会执行不成功呢?比如:
conn.setAutoCommit(false);
stm.addbatch("delete from table1 where ....");
stm.addbatch("insert into table1 values(......)");
stm.addbatch("update table2 set ...where ...");
stm.executeBatch();
conn.commit();

通常情况下执行是没有问题的,但为什么有时候会insert失败呢?
实在是搞不明白为什么,请大家帮忙了 先谢了!
[b]问题补充:[/b]
在录入时前台都用js经过校验了 数据是正确的,executeBatch()这个方法 如果其中有一条执行不成功是不是都不执行呢?

  • 写回答

2条回答 默认 最新

  • wanghaolovezlq 2009-10-17 13:17
    关注

    int[] executeBatch()
    throws SQLException将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。返回数组的 int 元素的排序对应于批中的命令,批中的命令根据被添加到批中的顺序排序。方法 executeBatch 返回的数组中的元素可能为以下元素之一:
    大于或等于零的数 - 指示成功处理了命令,是给出执行命令所影响数据库中行数的更新计数
    SUCCESS_NO_INFO 的值 - 指示成功执行了命令,但受影响的行数是未知的
    [color=red]如果批量更新中的命令之一无法正确执行,则此方法抛出 BatchUpdateException,并且 JDBC 驱动程序可能继续处理批处理中的剩余命令,也可能不执行。无论如何,驱动程序的行为必须与特定的 DBMS 一致,要么始终继续处理命令,要么永远不继续处理命令。如果驱动程序在某一次失败后继续进行处理,则 [/color]BatchUpdateException.getUpdateCounts 方法返回的数组将包含的元素与批中存在的命令一样多,并且其中至少有一个元素将为:

    EXECUTE_FAILED 的值 - 指示未能成功执行命令,仅当命令失败后驱动程序继续处理命令时出现
    驱动程序不需要实现此方法。在 Java 2 SDK, Standard Edition, 1.3 版中已经修改了可能的实现和返回值,以适应抛出 BatchUpdateException 对象后在批量更新中继续处理命令的选项。

    返回:
    包含批中每个命令的一个元素的更新计数所组成的数组。数组的元素根据将命令添加到批中的顺序排序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件