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条)

报告相同问题?

悬赏问题

  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝