可能无法清理java.sql.ResultSet,Statement。没有履行清理资源的义务

时间:2012-02-25 06:22:39

标签: java sql nullpointerexception findbugs

我在我的一个java文件中使用过FindBugs工具,并从工具中得到以下提到的错误消息。

我在运行应用程序时确实发现了这个问题。我已在Getting TDS driver - java.lang.NullPointerException. this exception is not consistent上发布此内容。

我无法弄清楚为什么会这样。

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]
剩余义务:{Statement 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,结果集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 个答案:

答案 0 :(得分:1)

我们在声纳中有相同的消息。这是因为findbugs不知道DataBaseUtil.close(conn, ps, rs);实际上关闭了你的资源。 Findbugs以相同的方法搜索资源的实际调用。