声纳问题“;getxyz(String,String)可能无法清理java.sql.ResultSet";
我面临以下声纳问题,代码如下: getxyz(字符串,字符串)可能无法清理java.sql.ResultSet 即使在关闭声纳问题“;getxyz(String,String)可能无法清理java.sql.ResultSet";,java,sonarqube,Java,Sonarqube,我面临以下声纳问题,代码如下: getxyz(字符串,字符串)可能无法清理java.sql.ResultSet 即使在关闭CallableStatement public String getxyz(String x, String y) throws DBException { CallableStatement castat = null; String result = null; try { castat = getConnectio
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
仅在方法中使用而不是此
castat.executeQuery();
result = castat.getString(4);
您可能希望最初编写此代码(因为您正在读取callablestatement,而不是存储过程调用的结果):
当然,结果集应该在finally块中正确关闭。我建议切换到更现代的。现在是2018年,任何人都不应该再手工编写try/close/finally代码。您的SonarQube版本和已安装插件的版本是什么?
ResultSet rs= castat.executeQuery();
if (rs.next()) {
result = rs.getString(4);
}