может быть не в состоянии очистить java.sql.ResultSet, Statement. Обязательство по очистке ресурса не выполнено - PullRequest
0 голосов
/ 25 февраля 2012

Я использовал инструмент FindBugs в одном из моих файлов Java и получил ниже упомянутое сообщение об ошибке от инструмента.

Я действительно обнаружил упомянутую проблему при запуске моего приложения. Я разместил это на Получение драйвера TDS - java.lang.NullPointerException. это исключение не соответствует .

Я не могу понять, почему это происходит.

1.) Метод com.vtech.tdpms.dao.ClientAuthenticationDAO.authenticateClient (InputBean) может не выполнить очистку java.sql.ResultSet
Обязательство по очистке ресурса, созданного в ClientAuthenticationDAO.java:[line 44], не выполняется

Тип ссылки java.sql.ResultSet
1 экземпляр тип обязательства остается
Путь продолжается в ClientAuthenticationDAO.java:[line 45]
Путь продолжается в ClientAuthenticationDAO.java:[line 46]
Путь продолжается в ClientAuthenticationDAO.java:[line 61]
Остальные обязательства: {ведомость x 1, ResultSet x 1}

2.) Метод com.vtech.tdpms.dao.ClientAuthenticationDAO.authenticateClient (InputBean) может не выполнить очистку java.sql.Statement
Обязательство по очистке ресурса, созданного в ClientAuthenticationDAO.java:[line 38], не выполняется
Тип ссылки java.sql.Statement
1 экземпляр тип обязательства остается
Путь продолжается в ClientAuthenticationDAO.java:[line 39]
Путь продолжается в ClientAuthenticationDAO.java:[line 40]
Путь продолжается в ClientAuthenticationDAO.java:[line 41]
Путь продолжается в ClientAuthenticationDAO.java:[line 42]
Путь продолжается в ClientAuthenticationDAO.java:[line 43]
Путь продолжается в ClientAuthenticationDAO.java:[line 44]
Путь продолжается в ClientAuthenticationDAO.java:[line 45]
Путь продолжается в ClientAuthenticationDAO.java:[line 46]
Путь продолжается в ClientAuthenticationDAO.java:[line 61]
Остальные обязательства: {ведомость x 1, ResultSet x 1}

Java-код -

 public class ClientAuthenticationDAO extends DAOUtil {       
 private static LogManager LOG = new LogManager(ClientAuthenticationDAO.class);

 public boolean authenticateClient(InputBean objInputBean) throws SQLException {  // line 30
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        boolean isAuthenticationSuccess = false;

        try {
            conn = getConnection();
            ps = conn.prepareStatement(ClientAuthenticationQueryUtil.AUTHENTICATE_CLIENT);    // line 38
            ps.setString(1, objInputBean.getUsername());                 // line 39
            ps.setString(2, objInputBean.getPassword());                 // line 40
            ps.setString(3, objInputBean.getCompanyCode());              // line 41
            rs = ps.executeQuery();                                      // line 42

            while(rs.next())  {                                        // line 44
                if(GenTools.isEmpty(objInputBean.getClientId())){         // line 45
                    objInputBean.setClientId(rs.getString("login_xid"));  // line 46
                }                   
                objInputBean.setAdminId(rs.getInt("admin_id"));
                objInputBean.setLoginUserPID(rs.getInt("login_user_pid"));
                objInputBean.setUserType(rs.getString("user_type"));
                isAuthenticationSuccess = true;
            }

        } catch (SQLException sqlExp) {
            sqlExp.printStackTrace();
            LOG.fatal(sqlExp);
            throw sqlExp;
        } finally {
            DataBaseUtil.close(conn, ps, rs);
        }           

        return isAuthenticationSuccess;
    }

}

1 Ответ

1 голос
/ 25 февраля 2012

У нас одинаковые сообщения в сонаре. Это связано с тем, что findbugs не знает, DataBaseUtil.close(conn, ps, rs); фактически закрывает ваши ресурсы. Findbugs выполняет поиск фактического вызова ресурса в том же методе.

...