我用JDBC执行一条update语句时,能够成功执行,可是我执行两条或者多条update语句时却出现错误咯  
1、sql =  "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1"; //  正确2. sql = "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1;  update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2;"; // 出错 
错误信息:
         at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2921)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2972)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2902)
at com.mysql.jdbc.Statement.execute(Statement.java:529)哪位高手能帮忙解释一下啊  谢谢咯 先。。

解决方案 »

  1.   

    请你别把所有语句写到一个STRING里面去
      

  2.   

    sql文要一条一条的执行,用事务
      

  3.   


    为什么呢 ???  sql语句不是一条字符串吗??
      

  4.   

    可以,前提是你把MYSQL的实现包,你自己全部重写
      

  5.   


    insert  语句是可以连续写多条的丫 然后执行一次就OK咯  难得update需要一条语句执行一次  是不是效率太低咯  时间都浪费在路上咯 可是  (⊙o⊙)
      

  6.   

    sql批处理文件里可以使用“;”来分开两条语句;但是在此处的执行语句里,不可以使用分号
    PreparedStatement 或 Statement 应该都是一句句执行,不可以进行批处理的个人理解,希望有帮助
    多多交流
      

  7.   


    如果我要是更新一千万条记录的话,是不是要向数据库发送一千万次sql语句哦  这样子的话 
      

  8.   

    不是, 可以用到PL/SQL语句块处理,进行批量插入。当然如果需要,可以使用模式
      

  9.   

    把两个语句写到一个事务里,再commit。
      

  10.   

    每个数据库的 SQL语句分隔符号不一样的吧。。 你查询下MYSQL的是什么  
      

  11.   

    如果执行多条 sql 语句,建议用 batch
      

  12.   

    sql = "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1;"+" update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2;"
      

  13.   


    更新一千万条数据也不会是一条一条去更新的,一般 UPDATE 语句用于批量更新,比如说统一修改某些数据。
      

  14.   

    有点迷惑你在代码中也是这样写的?
    “sql = "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1; update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2;";”
    有换行?如果按照我之前的错误来看呢···你不要换行就对了···把这句sql写成一行。
      

  15.   

    这样的语句用preparedstatement执行不过的,为什么preparedstatement要这样做呢?是为了安全,所以lz别这样写,这样写很容易被人家注入
      

  16.   


    Statement stmt = null;
    String[] sqls = {
    "update monitor_id set lastid = 11 ,now_max_id = 11177 where id = 1",
    "update monitor_id set lastid = 200 ,now_max_id = 200 where id = 2" 
    }; for (int i = 0; i < sqls.length; i++) {
    try {
    stmt.addBatch(sqls[i]);
    } catch (SQLException e) {
    // TODO 自動生成された catch ブロック
    e.printStackTrace();
    }
    }
    try {
    stmt.executeBatch();
    } catch (SQLException e) {
    // TODO 自動生成された catch ブロック
    e.printStackTrace();
    }
      

  17.   

    执行一条sql后要执行 preparedStatement.close()方法.
      

  18.   


    你执行一条sql后没有关闭就接着执行第二条,结果集也没有清空,貌似会出错吧
      

  19.   

    monitor_id 这个是表名吗  咋看着怎么别扭  楼主要注意代码规范啊 别人读估计是列名
      

  20.   

    string sql1 = "";
    string sql2 = "";
      

  21.   

    这样是不可用的executeUpdate()是会返回一个int类型的数据来表示插入成功或失败的一个sql里面放了两个insert,那么如果一个插入成功但是另一个插入失败的话,方法该如果反馈回来呢?