【问题标题】:Closing a connection关闭连接
【发布时间】:2009-08-27 11:13:40
【问题描述】:

我正在使用一个类 DBConnection,它有一个静态方法 createConnection。我创建了一个类似的连接对象

Connection con=DBConnection.createConnection();

我不会忘记将它与语句和结果集一起关闭。

现在有一个相同的 DBConnection 有一个普通的方法 createConnection 和创建一个新的 Connection 对象有什么不同

DBConnection dbConnection=new DBConnection();
Connection con=dBConnection.createConnection();

当然我不会忘记关闭连接、结果集和语句。

另一个疑问是关闭连接是否意味着使其有资格进行垃圾收集,即。 con 变量现在将等于 null?

【问题讨论】:

    标签: java jdbc connection


    【解决方案1】:

    在实例上调用静态方法(第二个示例)与在没有实例的情况下调用静态方法完全相同(第一个示例)。

    请记住,静态方法 DBConnection.createConnection() 无论如何都会创建连接的新实例(这就是所谓的工厂方法),因此在您的第二个示例中,您实际上是在创建两个实例(dbConnection 和 con)。

    关闭不会使连接实例符合 GC 条件。关闭只是关闭与 RDBMS 的底层物理连接。

    【讨论】:

    • 其实在不知道来源的情况下,没有办法知道他的createConnection()是否真的创建了新的连接,从池中返回连接,每次调用都返回相同的连接等等。
    • 第二种方法调用DBConnection对象的非静态方法。 con 的变量关闭后会产生什么结果?会为空吗?
    • 好点。我只是假设 createConnection 实际上“创建”连接;)
    • 是的,它只是使用驱动程序创建连接
    • @Harish:不,它仍将是相同的连接实例,但已关闭。 java中没有办法通过调用对象的方法来“取消引用”对象。