Java 资源泄漏:';ps&x27;可能无法在此位置关闭
看看这个简单的数据库查询方法,它给了我一个警告Java 资源泄漏:';ps&x27;可能无法在此位置关闭,java,jdbc,Java,Jdbc,看看这个简单的数据库查询方法,它给了我一个警告资源泄漏:“ps”可能不会在返回行的这个位置关闭 public Bancos getDefault() { Debug.out(""); PreparedStatement ps = null; Bancos banco = null; try { String query = "SELECT * FROM " + TABLE_BANCOS + " " +
资源泄漏:“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;
}
我想知道为什么eclipse会给我这个警告,因为我甚至在最后
块上关闭ps
。这只是一个假阳性警告吗
我使用Java7
解决方案:
这似乎是Java7的一个问题,请从重复的问题中检查这一点
因此,固定代码:
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;
}
谢谢你给我指出答案 您认为此警告为假阳性的假设是正确的
在Eclipse4.5中测试代码时,我没有收到任何警告。与此同时,Eclipse Java编译器中的静态分析似乎有所改进。您使用的是什么Eclipse版本?