看看这个简单的数据库查询方法,它给我发出警告资源泄漏:'ps'可能没有在返回行中的这个位置
关闭..
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;
}
所以,固定代码:
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为我指出了答案。
您认为此警告是假阳性的假设是正确的。
在Eclipse4.5中测试代码,我没有收到任何警告。与此同时,Eclipse Java编译器中的静态分析似乎有所改进。
我正在编写一个程序,希望控制台输出用户输入的数字的剩余部分。但是,每次我编译代码时,控制台都会打印出来,我得到以下控制台错误: 我不确定控制台所说的“资源泄漏”是什么意思。我在几个不同的地方查找过它(包括API和其他堆栈溢出问题),我不确定为什么没有打印到控制台。我正在使用DrJava程序,以防有人想知道。 这里是我的代码供参考:
我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用
为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?
此代码导致资源泄漏: conin从未关闭 为什么会发生这种情况?我如何修复它?
当我创建扫描仪时,似乎出现了这个错误。我试图通过搜索错误名称来解决这个问题,但到目前为止未能成功地让消息停止出现。 代码: 我得到错误的部分: