我有关于在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;
}
答案 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.
}
}