SONAR问题“ getxyz(String,String)可能无法清理java.sql.ResultSet”

时间:2018-08-28 15:45:34

标签: java sonarqube

我遇到以下具有以下代码的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仅在方法中使用

1 个答案:

答案 0 :(得分:0)

代替这个

castat.executeQuery();
result = castat.getString(4);

您可能想最初编写此代码(因为您正在读取callablestatement而不是存储过程调用的结果):

ResultSet rs= castat.executeQuery();
if (rs.next()) {
     result = rs.getString(4);
}

当然,结果集应该在finally块中正确关闭。