gpt4 book ai didi

java - 规则 "Resources should be closed"如何检查连接是否关闭?

转载 作者:行者123 更新时间:2023-11-30 07:53:16 26 4
gpt4 key购买 nike

这是一个问题,不是一个问题。

我有一个名为 DSConnectionUtilExternal 的类,其中一种方法用于检索数据库连接,另一种方法用于关闭它。这个类在一个 jar 文件中。

另一方面,我有一个项目,其中包含 jar 文件作为依赖项。在这个项目中我有这段代码

Connection con = null;
ResultSet rsGet = null;
PreparedStatement psGet = null;
try {
con = DSConnectionUtilExternal.openConnection();

psGet = con.prepareStatement("SELECT * FROM TEST");
rsGet = psGet.executeQuery();
int counter = 0;
while (rsGet.next()) {
counter++;
System.err.println(counter);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rsGet != null) {
rsGet.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
rsGet = null;
try {
if (psGet != null) {
psGet.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
psGet = null;
DSConnectionUtilExternal.closeConnection(con);
}

如果我删除 jar 文件中方法 closeConnection 的内容,sonar 不会检测到连接未关闭。我觉得很正常,sonar不会反编译jar文件来访问jar文件代码。

那么问题来了? “Resources should be closed”规则在finally子句中判断连接是否关闭的标准是什么?

谢谢

最佳答案

您的问题的正确假设:目前 SonarJava(刚刚发布的 4.11)不进行跨文件分析,并且不知道您的 closeConnection 方法中发生了什么。

但是,关于未关闭资源的规则有一个简单的启发式方法,可以避免在将资源传递给名为 close 的方法时将资源视为已关闭的误报。

SonarJava 正在努力读取您的 jar 文件并了解那里的资源已关闭,但这是一个复杂的功能,我们希望在不久的将来提供它。

关于java - 规则 "Resources should be closed"如何检查连接是否关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44965791/

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