gpt4 book ai didi

java - 资源泄漏: 'ps' may not be closed at this location

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

看看这个简单的数据库查询方法,它给了我警告 Resource Leak: 'ps' may not be closed at this location在返回行中..

public Bancos getDefault() {
Debug.out("");

PreparedStatement ps = null;
Bancos banco = null;

try {

String query = "SELECT * FROM " + TABLE_BANCOS + " " +
"WHERE " + FIELD_KEY + " = ?;";

ps = connector.prepareStatement(query);
ps.setString(1, new ParametrosManager().getParametros().getCodigoBanco());

ResultSet rs = ps.executeQuery();
if(rs.next()) {
banco = new Bancos(
rs.getString(FIELD_KEY),
rs.getDate(FIELD_DATAREGISTO),
rs.getString(FIELD_ABREVIATURA),
}

rs.close();
ps.close();

} catch(SQLException se) {
se.printStackTrace();
} finally {
try {
if(ps != null)
ps.close();
} catch(SQLException se) {
se.printStackTrace();
}
}

return banco;
}

我想知道为什么 eclipse 会给我这个警告,因为我什至要关闭 psfinally上堵塞。这只是一个误报警告吗?

我使用 Java 7。

解决方案:

似乎是Java 7的问题,检查这个answer来自重复的问题。

所以,固定代码:

public Bancos getDefault() {
Debug.out("");

Bancos banco = null;
String query = "SELECT * FROM " + TABLE_BANCOS + " " +
"WHERE " + FIELD_KEY + " = ?;";

try( PreparedStatement ps = connector.prepareStatement(query); ) {
ps.setString(1, new ParametrosManager().getParametros().getCodigoBanco());

ResultSet rs = ps.executeQuery();
if(rs.next()) {
banco = new Bancos(
rs.getString(FIELD_KEY),
rs.getDate(FIELD_DATAREGISTO),
rs.getString(FIELD_ABREVIATURA),
}

rs.close();

} catch(SQLException se) {
se.printStackTrace();
}

return banco;
}

感谢Luiggi为我指出答案。

最佳答案

您认为此警告是误报的假设是正确的。

在 Eclipse 4.5 中测试您的代码我没有收到任何警告。看来 Eclipse Java 编译器中的静态分析同时得到了改进。

关于java - 资源泄漏: 'ps' may not be closed at this location,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336653/

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