语句都没有执行成功,你可以先换一条没有重复记录的试一试。
不知道你的int counts[] 为什么定义了两次???建议第一次去掉

解决方案 »

  1.   

    首先,据我所知executeBatch()好像是做事务处理的,也就是要么batch中的操作全部成功或者全部失败。我不知道你的dc_paper是否有唯一约束条件,也就是在已经存在e,e记录的情况下再插一条e,e会出错,如果是这样,那么不难解释。
    插入时,首先插入t,f成功
    再插入e,e,违反唯一约束,失败
    stmt回滚到最先的情况,所以counts[]都是返回插入失败,也就是{1,1}了
    不过在程序中,你最好都要进行错误捕捉和出错的回滚操作。
      

  2.   

    int []counts={-1,-1};
    int counts[] = stmt.executeBatch();
    ????
    怎么两次?什么意思?看不懂.
      

  3.   

    int counts[] = stmt.executeBatch();应该改为counts= stmt.executeBatch();
    con设为自动提交方式,batch中的操作可以是部分成功部分失败。(就是指批处理中插入的记录有主键冲突的没有插入,没有主键冲突插入成功)
    dc_paper有唯一约束条件;
    另外,如果我一次批处理5000个insert,stmt.setFetchSize()如果设置成5000是不是就能提高插入数据库的性能。
      

  4.   

    根据你假设的情况,smtmt.executeBatch()必然抛出BatchUpdateException(因为重复插入
    记录(e,e)),此时jdbc driver可以选择继续执行剩下的命令或停止执行而把整个batch回滚。
    如果是后一种情况,那么counts[]依然是{-1,-1}PS:最好报出你使用的jdbc driver,不同厂商的jdbc driver,其实现都是不同的
      

  5.   

    应该没有问题,后面应该加上
    stmt.executeBatch()
    这个与自动提交无关
      

  6.   

    try {
          String sql = "insert into message (msgId,content,isRead,sendTime,title,fromUser,fromUserType,toUserType,toUser)" +
              " values(s_messageId.nextval,'" + StringUtil.toGb(this.content) +
              "','否',sysdate,'" + StringUtil.toGb(this.title) +
              "','" + this.fromUser +
              "','" + this.fromUserType + "','" + this.toUserType + "',?)";
          this.escapSQLTag();
          conn = db.getConnection();
          ps = conn.prepareStatement(sql);
          for (int i = 0; i < toUser.length; i++) {
            ps.setString(1, toUser[i]);
            ps.addBatch();
          }
          ps.executeBatch();
          tag = true;
        }
        catch (Exception e) {
          System.out.println(e.getMessage());
        }
        finally {
          try {
            db.CleanConnection(conn, ps);
          }
          catch (Exception e) {
            System.out.println(e.getMessage());
          }
        }
      

  7.   

    jdbc driver是COM.ibm.db2.jdbc.app.DB2Driver!!