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

Lam*_*bda 6 java jdbc

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

duf*_*ymo 11

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

你应该依赖于它.

规范如下:

应用程序调用Statement.close方法来指示它已完成处理语句.关闭创建它们的连接时,将关闭所有Statement对象.但是,应用程序在完成处理后立即关闭语句是一种很好的编码实践.这允许立即释放语句正在使用的任何外部资源.

最佳做法是在finally块中关闭所有ResultSet,Statements和Connections,每个ResultSet都包含在它们自己的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
}
Run Code Online (Sandbox Code Playgroud)

像这样打电话:

Statement s;
try
{
    // JDBC stuff here
}
finally
{
    DatabaseUtils.close(s);
}
Run Code Online (Sandbox Code Playgroud)