我猜是这样的,执行statement后返回一个结果集保存在内存中,通过一个结果集的变量名rs指向statement的结果集,或者应该说是访问statement的结果集,但是你关闭了statement后,返回的结果集就没有了,也就是说rs所指的地方已经没有东东,rs变成了null,没有指向任何的结果集。
以上是我的理解,有不对的地方还请高人指点。

解决方案 »

  1.   

    基本上是这样.
    有一个共公类,它执行statement,然后关闭这个statemetn,返回rs
    之前的程序是没错的,
    但不知为什么,换了一个更新的驱动后,不能在共公类中关闭statement,否则出错,
    换回旧的驱动后还是出错(会不会与系统缓存有关?),郁闷啊!
      

  2.   

    Operation not allowed after ResultSet closed
    (应该是rs被关闭了)
      

  3.   

    我问的是这个"不能在共公类中关闭statement,否则出错".
      

  4.   

    公共类不会没错
    问题是在公共类中关闭statement,返回的rs无效;
    如果在公共类中不关闭statement,则返回的rs有效,但这样会造成statement未关闭,消费系统资源.
      

  5.   

    这样的话,你可以这样做:try{}catch(Exception e){}finally{con.close();}把连接给关闭了,自然会释放系统资源。
      

  6.   

    事情是这样,statement and PreparedStatement, 在执行Close()以后,与他对应的ResultSet对象就一并销毁了
    When a Statement object is closed, its current ResultSet object, if one exists, is also closed. 
    详情参见sun官方文档
      

  7.   

    请参考:http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html
      

  8.   

    我个人觉得是这样的,并不是说执行了statement语句后就得到了ResultSet 类的对象,而是可能在实现ResultSet时,组合了一个Statement 对象,如果Satement 对象不存在的话,ResultSet 对象也就没了存在的意义了