系统是JSP+JAVABEAN实现,我在class中定义了
public ResultSet executeQuery(String sql) {
try {
conn = ds.getConnection();
stmt =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
}
catch (SQLException ex) {System.err.println("sql_data.executeUpdate:" + ex.getMessage());}
return rs;
}
然后在页面通过
ResultSet rs=sqlbean.executeQuery("select ......");
来读取数据库,通过配置TOMCAT的连接池来连接数据库,但由于CLASS中没有conn.close()和stmt.close(),所以当页面庞大时,就会出线连接池溢出的错误,我试过在class中加上以上两句关闭,又会出现连接已关闭的错误,到底这里应该怎样改呢,望各位给予帮助,谢谢

解决方案 »

  1.   

    这样的写法很不好,因为关闭顺序是这样的
    rs.close();
    stmt.close();
    conn.close();
    最好把函数改下,返回一个查询的结果List,增加一个finnaly块,按以上顺序关闭连接
      

  2.   

    关了,当然就没数据了。
    不用用用ResultSet 返回数据,用rowSet ,HashMap 这些把结果返回就可以了
      

  3.   

    但是我很多个网页上都是用ResultSet rs来接受结果集,如果全部都改,那就整个都要改吗?请问有没有更好的方法,能够返回结果集后关闭连接的
      

  4.   

    。。如果你懒的重构的话,那只好再提供一个方法来关闭Connection,Statement
    如:
    public void closeConnAndStmt(){
      try{
           stmt.close();
           conn.close();
      }catch(SQLException e){
           e.printStackTrace();
       }
    }
    然后在rs.close();之后马上调用此方法。
    不过我还是建立你重构一下,这样的使用太丑陋了
      

  5.   

    在中javabean写个关闭数据库的方法然后在页面调用