java.sql.Connection.close()对java.sql.Statement对象等的影响

时间:2010-04-25 15:12:43

标签: java jdbc

关闭java.sql.Connection是否也会关闭从该连接获得的所有语句,预备语句等?或者,如果我关闭连接但是保留语句等未公开会导致内存泄漏吗?

1 个答案:

答案 0 :(得分:11)

  

关闭java.sql.Connection   也关闭所有的陈述,   准备好的陈述等   从那个连接?或者在那里   如果我关闭,将会出现内存泄漏   连接但保留声明,   等等?

你应该依赖它。

规范内容如下:

  

应用程序调用该方法   Statement.close表明它   已完成处理声明。   将关闭所有Statement对象   什么时候创建它们的连接   关闭了。但是,编码很好   申请关闭的做法   他们有声明   完成处理它们。这允许   任何外部资源   声明正在使用中   立即

最佳做法是在finally块中关闭所有ResultSet,Statements和Connections,每个以自己的try / catch包含,与获取的顺序相反。

写一个这样的课:

public class DatabaseUtils
{
    public static void close(Statement s)
    {
        try
        {
            if (s != null)
            {
                s.close();
            }
        }
        catch (SQLException e)
        {
            // log or report in someway
            e.printStackTrace();
        }
    }

    // similar for ResultSet and Connection
}

这样打电话:

Statement s;
try
{
    // JDBC stuff here
}
finally
{
    DatabaseUtils.close(s);
}