那是你代码有问题,应该在conn.close之前就关闭必要的ResultSet和Statement、PreparedStatement这几个对象而且也必须在使用最后关闭conn

解决方案 »

  1.   

    ClassB中被调用方法: public ResultSet GetResultSet(String SqlStatement, int startpos,
                                    int recordnumber) throws SQLException {
        String tempsql = SqlStatement;
        ResultSet resultset = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        try {      //tempsql = String.valueOf(tempsql) + String.valueOf(String.valueOf(String.valueOf((new StringBuffer(" limit ")).append(startpos).append(",").append(recordnumber))));
    //      tempsql = "SELECT * from (select zcsrq,zczhkszd,zhyzk," +
    //          "zljsy,zsfzh,rownum num from MZ_WLRKGL where rownum <=8) where num >= 1";      tempsql = "SELECT * from ( " + SqlStatement + " and rownum<=" + (recordnumber+startpos)+ " ) where num >= " + startpos ;
          System.out.println("tempsql::::"+tempsql);
          conn = ResourceManager.getConnection();
           pstmt = conn.prepareStatement(tempsql);
          resultset = pstmt.executeQuery();
          //System.out.println("11:"+resultset.getString("column_desc"));
          return resultset;
        }
        catch (Exception e) {
          e.printStackTrace();
        }
        finally {
          pstmt.close();
          resultset.close();
          if(conn!=null){
            conn.close();
          }
        }
        return null;
      }
      

  2.   

    部分报错信息:<2006-10-12 下午02时56分58秒 CST> <Error> <HTTP> <BEA-101017> <[ServletContext(i
    d=42165252,name=DefaultWebApp,context-path=)] Root cause of ServletException.
    javax.servlet.jsp.JspException: TableTag - Result set already closed
      

  3.   

    把resultset 转换成对象数组或ArrayList,finally里的语句在返回之前就执行了,当然是空了。还有return null;去掉
      

  4.   

    因为Connection已经被你关闭了,
    这个问题是很麻烦, 不关connection吧, 又怕connection一直不关。建议转换成ArrayList...(.net里返回DataTable,关闭connection都没关系,java应该也这样)
      

  5.   

    用javax.sql.rowset 这个包里的类。。
    他会帮你建立一个cache  即使Connection关闭 
    数据也会被保留。