sql="update ever_user set ExpertGrace="+currentgrace+"whereNum="+tempnum+"";
      

解决方案 »

  1.   

    bbs.Check里是不是用了相同的Statement?因为当Statement关闭时,相应的ResultSet也将关闭。在while里,你调用了executeUpdate();建议你看看相关的几各类。
      

  2.   

    谢谢sonyStd(三好书生)
    我在bbs.Check中的executeQuery和executeUpdate方法中并没使用相同的statement
    代码如下:
    public ResultSet executeQuery(String sql)
      {
        rs=null;
        try
        {
          if(conn!=null)
            conn.close();
          conn=DriverManager.getConnection(sConnStr);
          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          rs=stmt.executeQuery(sql);
        }
        catch(SQLException ex)
        {
          System.err.println("check.executeQuery:"+ex.getMessage() );
        }
        return rs;
      }
    public void executeUpdate(String sql)
      {
        try
        {
          if(conn!=null)
            conn.close() ;
          conn=DriverManager.getConnection(sConnStr);
          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE) ;
          stmt.executeUpdate(sql);
          conn.commit() ;
        }
        catch(SQLException ex)
        {
          System.out.println("check.executeUpdate:"+ex.getMessage());
        }
      }
      

  3.   

    经过测试,去掉check.executeUpdate(sql);这句,则程序通过,看来是这句出问题了。
      

  4.   

    我把executeQuery()中的stmt改为stmt1,在把executeUpdate中的stmt改为stmt2,但问题依然存在,我现在用下面的方法把问题解决了,但我还是希望大家能继续讨论此问题!!!!while(rs.next()&&i<=answernum)
        {
          tempnum[i]=new Integer(rs.getInt("Num"));
          currentgrace[i]=new Integer(rs.getInt("ExpertGrace"));
          currentgrace[i]=new Integer(currentgrace[i].intValue()+intgrace[i]);
          i++;
        }
        rs.close();
        for(i=1;i<=answernum;i++)
        {
          sql="update ever_user set ExpertGrace="+currentgrace[i].intValue()+" where Num="+tempnum[i].intValue();
          check.executeUpdate(sql);
        }
      

  5.   

    另外,第2个问题,即:如果不想把查询结果中列相同的记录合并掉,该怎么办,我试着在sql语句中加关键字“all“,但不行!
      

  6.   

    在UPDATE
    不用ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE
    试试public void executeUpdate(String sql)
      {
        try
        {
          if(conn!=null)
            conn.close() ;
          conn=DriverManager.getConnection(sConnStr);
          Statement stmt=conn.createStatement() ;
          stmt.executeUpdate(sql);
          conn.commit() ;
        }
        catch(SQLException ex)
        {
          System.out.println("check.executeUpdate:"+ex.getMessage());
        }
      } 
      

  7.   

    出错信息:rs is closed我想是因为:executeQuery和executeUpdate用的是同一个Connection.当执行check.executeUpdate(sql);后,rs失去了Connection,rs被关掉了,所以当循环到第二次时,产生出错信息。这个问题我已通过下面的代码解决,也就是把executeUpdate从while循环中提出来: 
        while(rs.next()&&i<=answernum)
        {
          tempnum[i]=new Integer(rs.getInt("Num"));
          currentgrace[i]=new Integer(rs.getInt("ExpertGrace"));
          currentgrace[i]=new Integer(currentgrace[i].intValue()+intgrace[i]);
        }
        for(i=1;i<=answernum;i++)
        {
          sql="update ever_user set ExpertGrace="+currentgrace[i].intValue()+" where Num="+tempnum[i].intValue();
          check.executeUpdate(sql);
        }
      

  8.   

    to:skyyoung(路人甲)
    TYPE_SCROLL_INSENSITIVE的ResultSet,不会显示别人做出的更改(do not show changes made by others),这具体是什么意思呢??
    我不是计算机系的,基础差了点,呵呵.多指教!!