什么是在sub方法中获取jdbc连接的最佳方法

时间:2013-08-10 13:18:48

标签: java jdbc connection-pooling

我有关于在sub方法中从池中获取jdbc连接的查询。以下是我遇到的两种方法,建议我哪一种最好避免连接泄漏,并告诉是否有其他解决方案。

方法1: getConnection是返回Connection的方法。

void testMain(){
    Connection conn = getConnection();
    subMethod(conn)
    conn.close();
}
void subMethod(connection conn){
    // use jdbc connection
    return;
}

方法2:

void testMain(){
    Connection conn = getConnection();
    subMethod()
    conn.close();
}
void subMethod(){
    Connection conn = getConnection();
    conn.close();
    return;
}

1 个答案:

答案 0 :(得分:1)

您需要连接的地方应该获得连接。

确保没有资源“泄露”的方法是使用java 7的try-with-resource语法:

public String fetchSomeData() {
    try (Connection conn = getConnection()) { // This line, with this syntax, will ensure that it is automatically closed in an invisible "finally" block
        // Do what you need to do with the data, return it or something else
    } catch (SQLException e) {
        // No need to do clean up here, log the exception or do whatever you want.
    }
}

您可以对实现AutoCloseable接口的任何对象使用try-with-resource语法。这包括Connection,Statement和Resultset等。

如果需要执行事务,可能需要在方法中初始化Connection,然后将该Connection传递给添加到事务的其他不同方法,然后提交它。如果是这种情况,你可以这样做:

public String fetchSomeDataInTransactionStyle() {
    try (Connection conn = getConnection()) { // This line, with this syntax, will ensure that it is automatically closed in an invisible "finally" block
        conn.setAutocommit(false);
        addSomethingToTransaction(conn);
        addSomethingMore(conn);
        conn.commit();
    } catch (SQLException e) {
        // No need to do clean up here, log the exception or do whatever you want.
    }
}