一次操作可以,反复几次后,就空指针了。应该是连接用光了吧,
        只是我能关的都关了。关了连接类的关闭方法,还有连接后查询结果的关闭方法,都用了,还是关不彻底。

解决方案 »

  1.   

    不是关掉,是释放,放到list 或者栈或者其他的存储连接的对象中去
      

  2.   

    这样关
    if (conn != null) {
    try {
    if (!conn.isClosed()) {
    conn.close();
    }
    conn = null;
    } catch (Exception ex) { }
    }
      

  3.   


    楼主看看这个帖子,也许对你有帮助http://topic.csdn.net/u/20091202/12/d8419ea4-f056-4744-81aa-7c7f5e265b59.html
      

  4.   

    如果你自己写的连接池估计也知道释放吧,我想你不是用的自己写的。我前面也才出的这问题,用了dbcp的数据源,我前面也是直接把连接关了,结果也是最后连接池用光了。我最后用的是dbcp数据源的一个close方法,就可以释放了。
      

  5.   

    检查一下你的 Connection, Statement/PreparedStatement, ResultSet 对象是否都设置成成员变量了
      

  6.   

    如果设置成成员变量的话,请立即改为局部变量严禁将 Connection, Statement/PreparedStatement, ResultSet 设为成员变量,除非你在程序编码时能充分考虑并发问题。设置成成员变量的连接对象,在并发时将会造成大量的连接无法关闭(归还到池中),以至于将连接池中的连接耗尽。
      

  7.   

    我不同意火龙的意见,现在一般的 JavaBean每次都会实例化一个新对象进行查询
    只要查询完后使用 close()方法关闭,就没有什么问题
    除非使用了static修饰了这个对象或者 连接对象
    不然不存在并发的问题
    个人观点是 访问数据库的 JavaBean最好不要整个线程,并发之类的东东进去
    把该要取得的数据取出来了,就关了这个JavaBean
      

  8.   


    不是很明白这句话呢,难道线程安全问题只存在于 static 变量中?
      

  9.   

    谢谢,是的。不过是公司写的。我后来知道怎么回事了,是每一个rowset都要关,以前我以为关了总连接conn就可以了。