但是,如果没有关闭,那么我只运行一个页面的程序,就会导致有500个SqlServer的连接,刷新3次页面就死了. 也不知道是哪里来的那么多500个连接......所以,一定要解决关闭的问题.

解决方案 »

  1.   

    "那就在使用完之后就关闭它". 我也知道阿,就如上程序一样对吗?
    但是,我在SqlServer后台监控发现,刷新好几次a1.jsp页面后,Sqlserver有3-8个连接,为什么呢?
      

  2.   

    //test.close();
    //testa.close();
    %>
    你上面不是注释掉了吗??应该调用它
      

  3.   

    -------------------------------------
    //test.close();
    //testa.close();
    %>
    你上面不是注释掉了吗??应该调用它
    -------------------------------------但是test.java 与testa.java中的具体方法中已经dbconn.close()了阿。就算是把a1.jsp中的test.close(); testa.close();去掉注释,并且再次测试,发现还是每刷新一次都会新产生2个连接。N=N+2  如何处理??
      

  4.   

    这是test类里面一个方法,你并没有关闭
    public ResultSet get_prod() { DBConnection dbconn = new DBConnection();
    ResultSet rs = null; try{

    String sqlstr = "SELECT prod_id from vx_prod_dic_zhs";
    rs = dbconn.runSelQuery(sqlstr); return rs;
    }
    catch(Exception e){
    return rs;
    }
    }再从你的程序来看,每一次都调用某个getXXX方法都要打开一次数据库连接,这简直是性能上的巨大浪费,你应该在一个类中就使用一个数据库连接,然后用一个统一的close()方法来关闭,并把这个方法提供给使用者,要求他们使用完之后显式的关闭,按这样修改的test类应该是这样:
    import java.sql.*;public class test {
    DBConnection dbconn;
    // private ResultSet rs = null;
    public test() {
                 dbconn = new DBConnection();
    } /********************************
    * ?′DDSQLó??? £o2?è?ó??üD?????
    * @param sql SQLó???
    * @return int resultNum ?üD?μ?????êy
    */
    public ResultSet get_prod() {        try{

    String sqlstr = "SELECT prod_id from vx_prod_dic_zhs";
    rs = dbconn.runSelQuery(sqlstr); return rs;
    }
    catch(Exception e){
    return rs;
    }
    } public String get_prod2() { String prod_id="";
    try{

    String sqlstr = "SELECT prod_id from vx_prod_dic_zhs";
    rs = dbconn.runSelQuery(sqlstr);
    if(rs!=null && rs.next()){
    prod_id = rs.getString("prod_id");
    }

    }
    catch(Exception e){
    System.out.println("get_prod2:" + e.getMessage());
    }

    return prod_id;
    } public String get_prod3() { String prod_id="";
    try{

    String sqlstr = "SELECT prod_id from vx_prod_dic_zhs";
    rs = dbconn.runSelQuery(sqlstr);
    if(rs!=null && rs.next()){
    prod_id = rs.getString("prod_id");
    }

    }
    catch(Exception e){
    System.out.println("get_prod3:" + e.getMessage());
    }

    return prod_id;
    } /********************************
    * 1?±?á??ó
    */
    public void close() {
                      if(rs!=null)
                           rs.close();
                      if(dbconn!=null) 
      dbconn.close();
    }}
    这样修改以后,同样的方法修改testa类,记住,在jsp文件显式地调用这些类的对象的close()方法
      

  5.   

    ------------------------
    public class test {
    DBConnection dbconn;
    private ResultSet rs = null;
    public test() {
                 dbconn = new DBConnection();
    }
    ------------------------
    请教,是应该如上写法? 还是要如下写法更好??
    public class test {
    DBConnection dbconn = new DBConnection();
    private ResultSet rs = null;
    public test() { }
    ------------------------------
      

  6.   

    ----------------
    两者并没有本质上的区别,只是上面的方法更为清晰直观,你在构造函数中初始化成员变量不是更好吗?
    ----------------
    最新发现: 多次刷新页面后,
    SqlServer连接数还在长. 已经18个了.