tomcat连接池如何关闭连接是使用conn.close()还是conn=null.两者有什么区别?

解决方案 »

  1.   

    conn.close()
    区别是conn=null不会返回连接池,可能造成资源无法回收。
      

  2.   

    编程的好习惯是先coon.close(),再conn=null,
    coon.close()是关闭连接池,conn=null是蛇者conn为空,使下次再调用的时候不能连接。
      

  3.   

    用 conn.close(),所有的连接池实现都会采用动态代理或者装饰器模式把原本 Connection 的 close 方法改写,
    改成并不是真正意义上地关闭与数据库的物理连接,而是将其还到连接池中去便于重用。conn = null; 只是将局部变量置为了 null,并没有将实际的连接置为 null 或者还到连接池中去。
      

  4.   

    conn=null;就是表示一个引用,但没有指向任何对象,等待垃圾回收时进行对象资源回收!
    conn.close();表示关闭连接。如果
    conn=null;//在前
    conn.close();//在后
    则会报空指针异常,反之不会有异常。
    个人观点,仅供参考。。
      

  5.   

    请问bao110908 :
    InitialContext要不要关闭?
      

  6.   

    实际经验:慎用conn.close()!
    在实际工作中我们发现,如果使用tomcat JNDI并设置为容器管理连接池,则在调用conn.close()方法是会报非法访问异常,即你的项目没有权限去关闭tomcat帮你创建的连接对象,并不象5楼同学所说的情况(在tomcat6.0.18的开发版和服务器版,JDK版本1.5和1.6下均测试过,情况相同)。个人使用经验和建议:由于权限问题,我们不可能关闭连接对象,也不应该去关闭连接对象,因为由tomcat创建的连接池并非仅只提供给单个项目使用,而是提供给所有处于tomcat容器下的项目使用,如果我们的项目将连接对象关闭了,则将影响其他项目的数据库连接池。既然你已经将连接对象交由容器进行管理,那就不应该再过多关注,所以,个人建议,如果你使用了JNDI,那么要么写conn=null,要么不关闭。谢谢。
      

  7.   

    开了联节当然是要关的,不关,用不了多久,联接池就会没有可用的联接了,10楼的说法,我不同意.我们项目也用到JNDI,不关联接的话,点几下就报没有可用的联接错误了.而且要用con.close()来关闭.而且tomcat是可以给单个项目建联接池的.
      

  8.   

    直接关闭connection就可以了吧  不用手动关闭preparedstatement和resultset吗?