一个方法:
public ResultSet getResultSet(){
   ResultSet rs = null;
     .......(查询后,把记录集存入rs)
   return rs;
}这个方法会不会导致记录集未关闭的错误??
连续循环用此方法,会不会使数据库游标耗尽??
是不是要在程序中避免这种返回记录集的方法??

解决方案 »

  1.   

    尽量避免使用ResultSet,你可以将rs返回的值存入一个List中,然后关闭rs
      

  2.   

    只要statement关闭了,它自动会把相关的ResultSet也会关闭的。
    但是及时关闭能够有效的利用内存空间。
      

  3.   

    我一般是这样写的,各位给点建议while(rs.next){
        list.add(anObject(rs.getXXX(1), rs.getXXX(2)....));
    }finally{
       try{
        if(rs != null)
            rs.close();
        if(ps != null)
            ps.close();
       }catch(.....)
    }
      

  4.   

    因为java 是服务器端游标,  而不象VB等, 是客户端游标.
    所以必须立即读取全部记录, 然后存到List中, 迅速释放连接.
      

  5.   

    从conn建立statement,再从statement建立rs,但是conn关了rs就关了
    若conn不关则资源浪费
    建议用最新的jdbc中的catched rowset或者封装到set、list
      

  6.   

    请点这里,查看详细情况 http://www.lz.net.cn/bbs/X_AdvCom_Get.asp?UserID=7342
      

  7.   

    愚见(绝对不保证对啊!):这个方法会不会导致记录集未关闭的错误??
        不会!
    连续循环用此方法,会不会使数据库游标耗尽??
        会!
    是不是要在程序中避免这种返回记录集的方法??
        是!可以定义一个全局变量ResultSet,而不是在函数体中定义成局部变量,在代码最后关闭ResultSet,这样程序中只有一个ResultSet,不必担心数据库耗尽资源。^_^
      

  8.   

    //statement与ResultSet是配对的.创建了一个statement,执行之后必须马上关掉,否则大量的这样
    //的操作会当掉web服务器.
    public class Test {
      private PreparedStatement statement = null;
      private ResultSet resultSet = null;
      private void sqlExecute (String strSql) throws Exception{
          try {
    statement = conn.prepareStatement(strSql);
    resultSet = statement.executeQuery();
          } catch (Exception e){
    logger.error(e.getMessage());
    throw e;
          }
       }
       private void useResult(){
           try {
     sqlExecute(strBuffer.toString());
      if (resultSet.next()) {
                  //....
      } 
            }  finally {
               if(resultSet != null) {
                  resultSet = null
                  resultSet .close();
               }
               if(statement != null){
                  statement = null;
                  statement .close(); 
               }
            }
       }
    }