我遇到以下具有以下代码的SONAR问题:
“ getxyz(String,String)可能无法清理java.sql.ResultSet”
即使在关闭CallableStatement
public String getxyz(String x, String y)
throws DBException {
CallableStatement castat = null;
String result = null;
try {
castat = getConnection().prepareCall(
"{call xyz_prc(?,?,?)}");
castat.setString(1, y);
castat.setString(2, x);
castat.setString(3, "0");
castat.executeQuery();
result = castat.getString(4);
} catch (SQLException se) {
log.error("getxyz | ::SQLException",se);
throw new DBException(se.getMessage());
} finally {
try {
if(castat!=null) {
castat.close();
}
} catch (SQLException se) {
log.error("getxyz | ::SQLException",se);
}
closeConnection();
}
return result;
}
CallableStatement
仅在方法中使用
答案 0 :(得分:0)
代替这个
castat.executeQuery();
result = castat.getString(4);
您可能想最初编写此代码(因为您正在读取callablestatement而不是存储过程调用的结果):
ResultSet rs= castat.executeQuery();
if (rs.next()) {
result = rs.getString(4);
}
当然,结果集应该在finally块中正确关闭。