关闭打开的数据库连接?

时间:2012-05-08 15:20:51

标签: java jdbc

我的Web应用程序中有两个数据源。我正在以dataSource1.getConnection();获得连接。

我的问题是考虑以下代码:

Connection connection = null;
connection = dataSource1.getConnection();
connection = dataSource2.getConnection();
connection.close();

我正在获得dataSource1连接并立即为连接变量分配dataSource2连接。

当我关闭dataSource2连接时,dataSource1连接是否仍然打开?或者我需要按照以下方式进行操作?

Connection connection = null;
connection = dataSource1.getConnection();
connection.close();
connection = dataSource2.getConnection();
connection.close();

3 个答案:

答案 0 :(得分:2)

第二个例子是正确的,第一个例子将保持开放连接。此外,您应始终关闭finally块内的资源(在本例中为连接),例如:

Connection connection = null;

try {
    connection = dataSource1.getConnection();
} catch (SQLException e) {
    // handle exception
} finally {
    try {
        connection.close();
    } catch (SQLException e) {
        // handle exception
    }   
}

try {
    connection = dataSource2.getConnection();
    connection.close();
} catch (SQLException e) {
    // handle exception
} finally {
    try {
        connection.close();
    } catch (SQLException e) {
        // handle exception
    }
}

答案 1 :(得分:1)

您需要按照第二个代码示例中的说明进行操作。

在第一种情况下,垃圾收集器可能为您清理混乱(在未定义的时间之后)并关闭您丢失引用的连接(提供JDBC驱动程序供应商)在他们的finalize实现的Connection方法中实现了适当的逻辑,但是依靠这种情况被认为是非常不良做法

答案 2 :(得分:0)

Connection类实现AutoClosable接口,该接口定义了在不再需要时必须关闭的资源"。因此,连接对象被定义为需要调用其close()方法才能正确管理。

另一方面,Connection.close()方法记录为"立即释放Connection对象的数据库和JDBC资源,而不是等待它们自动释放"。这意味着最终会自动释放连接资源。

总的来说,我会说明确关闭您不再需要的任何连接会更好。