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

java.sql.Connection.close()对java.sql.Statement对象等的影响,java,jdbc,Java,Jdbc,关闭java.sql.Connection是否也会关闭从该连接获得的所有语句、准备好的语句等?或者,如果我关闭连接,但不关闭语句等,是否会出现内存泄漏 是否关闭java.sql.Connection 同时关闭所有声明, 准备好的报表等 从那联系上?还是有 如果我关闭了 但请留下声明, 等等,未关闭 你不应该依赖它 规范内容如下: 应用程序调用该方法 Statement.close表示 已完成对语句的处理。 所有语句对象都将关闭 当创建它们的连接 关门了。然而,这是一个很好的编码 申请关闭的惯例

关闭
java.sql.Connection
是否也会关闭从该连接获得的所有语句、准备好的语句等?或者,如果我关闭连接,但不关闭语句等,是否会出现内存泄漏

是否关闭java.sql.Connection 同时关闭所有声明, 准备好的报表等 从那联系上?还是有 如果我关闭了 但请留下声明, 等等,未关闭

你不应该依赖它

规范内容如下:

应用程序调用该方法 Statement.close表示 已完成对语句的处理。 所有语句对象都将关闭 当创建它们的连接 关门了。然而,这是一个很好的编码 申请关闭的惯例 一旦他们有 完成了加工。这允许 需要的任何外部资源 声明正在使用以发布 马上

最佳做法是关闭finally块中的所有结果集、语句和连接,每个结果集、语句和连接都包含在各自的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);
}
这样称呼:

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);
}

@duffymo:有没有官方文档可以让我找到更多关于这个的信息?也许是JDBC规范,但是如果实现你的规范的供应商决定不遵循这个建议,你就会有问题。在这种情况下,官方文件怎么说有什么关系?只是好奇-为什么这个答案对您来说不够权威?好吧,下面是规范所说的:13.1.4 Closing语句对象——应用程序调用method Statement.close来表示它已经完成了对语句的处理。当创建语句对象的连接关闭时,所有语句对象都将关闭。然而,应用程序在处理完语句后立即关闭语句是一种很好的编码实践。这允许立即发布声明使用的任何外部资源。请更新您的答案,并在第13.1.4节中添加文本,以便我将其标记为答案?谢谢,真恶心。使用executearound习惯用法将资源和异常处理抽象为其他各种可能的代码复制。玩
null
s很讨厌。