当然要关闭。这样写程序是不对的,程序在跑一段时间后一定会出问题。b中没有办法获得这个connection,因此这个connection便关不掉了。

解决方案 »

  1.   

    A.Class是包装好的取connection和resultSet的方法,当然不能关了,关了外面怎么用,关闭这个的原则的在哪里用,就在哪里关,这里只是取出去给别人用,当然是不关了,应该在用的地方关
      

  2.   

    当然要关闭,不过只是在A.class再写一个关闭的方法,再返回结果几中不可以掉用这个关闭的方法,但是可以在另一个类中(B.class)定义A类的对象,然后最终用这个A类的对象调用这个关闭资源的方法,否则用一段时间后肯定会出问题
      

  3.   

    A.java可以改成如下代码:package ex;import java.sql.*;public class A{
    Connection conn=null;
    Statement stmt=null;

    protected static Connection getConnection() 
          throws Exception
        {        
            Class.forName(oracle.jdbc.driver.OracleDriver).newInstance();
            
            return DriverManager.getConnection("...", "scott","tiger");
        }    public ResultSet getResultSet(String tableName)
          throws Exception
        {
            if (tableName == null)
                throw new Exception();
             
             conn = getConnection();
            if (conn == null) 
              throw new Exception();        String sql = "select * from " + tableName;
            
            stmt = conn.createStatement();
            return stmt.executeQuery(sql);
        }
        
     //关闭连接
    public void closeConnection(){
     try{
         if(stmt!=null)
           {
              stmt.close();
              System.out.println("stmt close");
           }
           
         if(conn!=null)
          {
              conn.close();
              System.out.println("conn close");
          }
         
        
         
        
        }catch(Exception e){
     System.out.println("login problem:"+e.getMessage());
       }

      }
      
    }然后再B.java中,调用A类的关闭资源方法:
    A a=new A();
    a.closeConnection();大致思路是这样的
      

  4.   

    ResultSet可以不关的,但是Connection一般是要关的,不然的话会占用太多的网络资源。
      

  5.   

    一定要关,不同的ResultSet实现要求不一样,有的实现不关也没有关系,但有的不关则会资源泄漏,所以最好按java doc要求,用完后调用close关闭,而且最好放在finally 中执行
      

  6.   

    A.class那样的代码很糟糕
    要末就用一个类直接操作数据库,每次完成就调用close()释放数据库连接。
      

  7.   

    关闭statement时,其所产生的resultset对象也关闭