如果bean的函数的返回值是一个ResultSet,那么我在什么时候关闭这个ResultSet以及Statement对象?

时间:2021-09-02 11:51:35
我在bean里面这样写:
……
public ResultSet selectinfo (String str){
   ResultSet rs=null;
   Statement stmt = connection1.createStatement();
    try{
          rs = stmt.executeQuery(str);
          return rs;
    }
    catch( Exception e)
    {
      return null;
    }
}
……
connection1是整个bean公用的连接,在bean初始化的时候建立。
我有如下很弱智的问题请问诸位大侠:
1、我什么时候才能关闭这个ResultSet以及Statement对象?需要再写一个函数么?
2、页面端(jsp)接收到这个ResultSet之后,这个ResultSet跟bean的ResultSet有什么关系,各存在什么地方?

10 个解决方案

#1


可以再写一个方法,destroy()
    至于存在什么地方,哈哈,那位高手来答一下?我是没概念。

#2


try {
}catch(Exception e){}
finally {
       try {
              if( rs != null ) rs.close();
              if( st != null ) st.close();
              if( con!=null) con.close();
        } catch (Throwable e) {
            e.getMessage();}
        }
前提是在try里面已经把rs转成别的对象存储了。
你说的bean的ResultSet我不是很清楚,是不是封装了java.sql.ResultSet啊?

#3


如果使用JDBC2.0,那么,在重新生成一个结果集后,上一个结果集会自动析构。
在JDBC3.0中,不存在这个问题。
至于存在什么,JSP中的resultSet只是和bean的resultSet共同指向同一个类里构造的对象。并不是存在什么地方。

#4


在Bean里面把ResultSet的结果转存到一个Vector或者什么里面。如果要把数据库的操作封装到类里面,就不要把ResultSet这样的东西,返回给页面。

#5


try {
}catch(Exception e){}
finally {
       try {
              if( rs != null ) {rs.close();}
              st.close();or ps.clost()
              con.close();
        } catch (Throwable e) {
            e.getMessage();}
        }

#6


ResultSet没有经过序列化,不能在网络上传播,所以不能让JavaBean返回ResultSet,通常应该把resultset加工成Vector来传播。

#7


最好改成用CacheResultSet

#8


同意
加工成Vector后进行输出

#9


public ResultSet executeQuery(String s)
    {
        ResultSet rs1 = null;
        try
        {
            if(conn != null)
                conn.close();
            conn = DriverManager.getConnection(sConnStr, UseName, PassWord);
            Statement statement = conn.createStatement();
            rs1 = statement.executeQuery(s);
        }
        catch(SQLException sqlexception)
        {
            System.err.println("rs.executeQuery error" + s + sqlexception.getMessage());
        }
        return rs1;
    }

我是这么写的,我觉得没有必要转为vector

#10


转为vector太耗内存

#1


可以再写一个方法,destroy()
    至于存在什么地方,哈哈,那位高手来答一下?我是没概念。

#2


try {
}catch(Exception e){}
finally {
       try {
              if( rs != null ) rs.close();
              if( st != null ) st.close();
              if( con!=null) con.close();
        } catch (Throwable e) {
            e.getMessage();}
        }
前提是在try里面已经把rs转成别的对象存储了。
你说的bean的ResultSet我不是很清楚,是不是封装了java.sql.ResultSet啊?

#3


如果使用JDBC2.0,那么,在重新生成一个结果集后,上一个结果集会自动析构。
在JDBC3.0中,不存在这个问题。
至于存在什么,JSP中的resultSet只是和bean的resultSet共同指向同一个类里构造的对象。并不是存在什么地方。

#4


在Bean里面把ResultSet的结果转存到一个Vector或者什么里面。如果要把数据库的操作封装到类里面,就不要把ResultSet这样的东西,返回给页面。

#5


try {
}catch(Exception e){}
finally {
       try {
              if( rs != null ) {rs.close();}
              st.close();or ps.clost()
              con.close();
        } catch (Throwable e) {
            e.getMessage();}
        }

#6


ResultSet没有经过序列化,不能在网络上传播,所以不能让JavaBean返回ResultSet,通常应该把resultset加工成Vector来传播。

#7


最好改成用CacheResultSet

#8


同意
加工成Vector后进行输出

#9


public ResultSet executeQuery(String s)
    {
        ResultSet rs1 = null;
        try
        {
            if(conn != null)
                conn.close();
            conn = DriverManager.getConnection(sConnStr, UseName, PassWord);
            Statement statement = conn.createStatement();
            rs1 = statement.executeQuery(s);
        }
        catch(SQLException sqlexception)
        {
            System.err.println("rs.executeQuery error" + s + sqlexception.getMessage());
        }
        return rs1;
    }

我是这么写的,我觉得没有必要转为vector

#10


转为vector太耗内存