在Java中做到真正安全的释放数据库资源

原创 2003年06月30日 14:30:00

在Connection上调用close方法会关闭Statement和ResultSet吗?

级联的关闭这听起来好像很有道理,而且在很多地方这样做也是正确的,通常这样写
Connection con = getConnection();//getConnection is your method
PreparedStatement ps = con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
……
///rs.close();
///ps.close();
con.close();  // NO!
这样做的问题在于Connection是个接口,它的close实现可能是多种多样的。在普通情况下,你用DriverManager.getConnection()得到一个Connection实例,调用它的close方法会关闭Statement和ResultSet。但是在很多时候,你需要使用数据库连接池,在连接池中的得到的Connection上调用close方法的时候,Connection可能并没有被释放,而是回到了连接池中。它以后可能被其它代码取出来用。如果没有释放Statement和ResultSet,那么在Connection上没有关闭的Statement和ResultSet可能会越来越多,那么……
相反,我看到过这样的说法,有人把Connection关闭了,却继续使用ResultSet,认为这样是可以的,引发了激烈的讨论,到底是怎么回事就不用我多说了吧。

所以我们必须很小心的释放数据库资源,下面的代码片断展示了这个过程

Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;

try {
    con = getConnection();//getConnection is your method
    ps = con.prepareStatement(sql);
    rs = ps.executeQuery();
    ///...........
}
catch (SQLException ex) {
    ///错误处理
}
finally{
    try {
        if(ps!=null)
            ps.close();
    }
    catch (SQLException ex) {
        ///错误处理
    }
    try{
        if(con!=null)
            con.close();
    }
    catch (SQLException ex) {
        ///错误处理
    }
}

很麻烦是不是?但为了写出健壮的程序,这些处理是必须的。

JDBC连接数据库和释放连接

用久了hibernate现在对于JDBC是怎么实现数据库的连接和释放,所以特地总结下关于JDBC的知识,目的是用于提醒自己很多Java的基础知识需要健全。 package com.ssh.actio...
  • qiulongtianshi
  • qiulongtianshi
  • 2013年08月30日 16:21
  • 5331

JDBC:JDBC资源释放的细节问题

在上篇博客介绍了jdbc的基本用法,其中有一段代码是这样的: public static void main(String[] args) { Connection conn =...
  • javy_codercoder
  • javy_codercoder
  • 2015年10月16日 15:00
  • 2825

数据库操作、IO操作的资源没有及时释放

错误案例 public class ReleaseRes { public void releaseDB () { Connection conn = null; ...
  • Rubenyu
  • Rubenyu
  • 2011年07月11日 08:42
  • 1227

SQLiteDatabase资源释放

SQLiteDatabse是android SDK提供的一个sqlite管理类。用于
  • Sailingthink
  • Sailingthink
  • 2014年05月04日 10:01
  • 1414

关于java中关闭数据库链接的正确写法

链接地址: http://hi.baidu.com/bjn%5Fwuming/creat/blog/ -----------------------------------------...
  • mql0825123
  • mql0825123
  • 2014年10月24日 17:30
  • 11121

在Java中做到真正安全的释放数据库资源

在Connection上调用close方法会关闭Statement和ResultSet吗?级联的关闭这听起来好像很有道理,而且在很多地方这样做也是正确的,通常这样写Connection con = g...
  • AYellow
  • AYellow
  • 2003年06月30日 14:30
  • 2464

在Java中做到真正安全的释放数据库资源

  • zgqtxwd
  • zgqtxwd
  • 2008年04月25日 16:27
  • 120

Java软件低级错误(一):资源未及时释放

¨解读:     在使用文件、IO流、数据库连接等不会自动释放的资源时,应该在使用完毕后马上将其关闭。关闭资源的代码try...catch...finally的finally内执行,否则可能造成资...
  • zxcvg
  • zxcvg
  • 2011年08月11日 19:05
  • 2009

java测试数据库连接关闭

  • 2013年11月27日 10:25
  • 1.93MB
  • 下载

Java利用ShutDownHook关闭系统资源

Java关闭钩子在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源的功能。 使用Runtime.addShutdownHook(Thread hook)向JVM添加关闭钩子 pub...
  • jaune161
  • jaune161
  • 2015年06月09日 10:00
  • 9685
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Java中做到真正安全的释放数据库资源
举报原因:
原因补充:

(最多只允许输入30个字)