2

java.sql.Connection如果as的实例con无效,与数据库建立的连接会发生什么情况。

con = null;

连接是关闭还是保持打开直到应用程序运行。

第二个问题:
同样,如果有javax.mail.Storeas的实例store并将其无效,

store = null;

将关闭 smtp 连接还是保持未关闭状态。谢谢。

4

3 回答 3

3

如果您将您设置Connection为 null,则此连接将保持“打开”状态,并且与关闭关联的代码将不会运行。因此,为了关闭它,您必须调用该close()方法。如果连接没有关闭,连接可能持有的其他资源也不会被释放

于 2012-07-04T07:26:22.753 回答
2

如果你让你的connection实例为空而不调用close()then,

connection 准备好被垃圾收集

并且它不会调用与close()方法实现相关的代码

于 2012-07-04T07:23:07.923 回答
1

有 finalize 方法,Connection 或 Store 的具体实现很可能会覆盖此方法并在那里调用 close()。例如,这里是 PostgreSQL JDBC 驱动程序的片段:

protected void finalize() throws Throwable
{
    if (openStackTrace != null)
        logger.log(GT.tr("Finalizing a Connection that was never closed:"), openStackTrace);

    close();
}

当垃圾收集器决定是时候收集给定对象时,将调用此方法。

但建议始终手动关闭连接和类似资源,因为垃圾收集器是不可预测的。例如,您可以比垃圾收集器启动和释放资源更快地达到连接限制。

于 2012-07-04T07:35:02.977 回答