rs.close();
rs=null;请问rs都已经close了,再rs=null还有意义吗?具体是什么意义?
close方法中不是已经将它置为null了吗?stmt 和 conn 也是同样的问题.谢谢!

解决方案 »

  1.   

    应该 是这样写的吧  if(rs != null)
         rs.close();
      

  2.   

    if(rs != null)
    {
      rs.close();
      rs=null;
    }问题是在if内部也有 rs=null; 呀,我看一个很权威的老师(马士兵)是这么用的.
     
      

  3.   

    rs.close();只表示关闭了资源,但不能保证对象不为null,rs=null这样可以快垃圾回收器对他的回收
      

  4.   


    rs=null,将rs的值赋值为空。
      

  5.   


          其实他这样做也没什么必要。rs=null。目的是为了让垃圾回收。但是垃圾回收机制不是你设置为null就会回收的。jvm有专门的线程会检测内存空间,当内存空间不够的时候,才会进行垃圾回收。
      

  6.   

    一个数据库访问类的封住,可能会把conn、pstmt、rs写成全局变量
    所以可能多个方法会用到 conn 、 pstmt 、rs
    我觉的有必要这样写的,印象中conn如果已经关闭  conn不赋值为null的话
    再调用close()方法 会报错,我想rs如果关闭了,再调用关闭方法应该也会报错。
    没编译器没法给你测试。。 rs.close();
    rs.close();连续调用两次看下能报错不?
    能报错就说明有必要这么写。
      

  7.   

    还有Connection的单例生产模式,关闭的时候不赋值成null 也会出问题的。//DaoBase 类
    private Connection conn;
    public static Connection getInstance(){
        if(this.conn == null){
           this.conn = DriverManager.getConn(....);
        }
        return this.conn ; 
    }
    public static void closeConn(boolean flag){
         if(conn != null){
             conn.close();
             if(flag){
                 conn = null;
             }
         }
    }
    ......
    //当前类public int static upadate(Connection conn,String sql){
            ...........
    }public static void main(String args[]){
       Connection conn =DaoBase.getInstance();
       this.update(conn,sql);//执行一条更新语句方法
        DaoBase.closeConn(false);//关闭没有设置成null
        //DaoBase.closeConn(true);  用这句代替上一句  后面都不会报错   conn = DaoBase.getInstance(); 
       conn.update(conn,sql); //报conn已经关闭 不能再用 类似的错误
       
    }如果之前有DaoBase
      

  8.   

     有些人认为设置为null可以防止关闭两次,关闭两次会有异常 见过那种写法 其实关闭两次就是编码有问题了,有问题报错是应该的,置成null也也有个异常么。。 SQLException换成NullPointerException  没看出什么意义。
      

  9.   

    经测试,连续关闭两次并未报错:rs.close();
    rs.close();但先赋为null之后再调用close,就会报NullPointerException:
    rs.close();
    rs=null;
    rs.close(); //此行报NullPointerException
    谢谢大家!