gpt4 book ai didi

java - 在子方法中获取jdbc连接的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-01 14:15:16 26 4
gpt4 key购买 nike

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

方法一: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;
}

最佳答案

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

确保没有资源“泄漏”的方法是使用 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 接口(interface)的对象上使用 try-with-resource 语法。其中包括连接、语句和结果集等。

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

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.
}
}

关于java - 在子方法中获取jdbc连接的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18162297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com