2012-02-25 36 views
0

我在我的一个java文件中使用了FindBugs工具,并从工具中得到了下面提到的错误信息。可能无法清理java.sql.ResultSet,Statement。清理资源的义务没有完成

我在运行我的应用程序时发现了这个问题。我已发布此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]
路径继续在ClientAuthenticationD AO.java:[line 61]
剩余义务:{声明X 1,结果集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: [线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; 
    } 

}

+0

如果您在finally块中手动关闭ps和rs,会发生什么情况?即分别调用'ps.close()'和'rs.close()'。 – 2012-02-25 06:32:52

+0

为什么这个问题被标记为'NullPointerException'?这个标签似乎指的是另一个问题。 – tom 2012-02-25 07:56:22

+0

执行此代码时,获取NullPointerException - 请参阅 - http://stackoverflow.com/q/9411706/147075 – Santosh 2012-02-25 08:01:11

回答

1

我们有声纳相同的消息。这来自findbugs不知道DataBaseUtil.close(conn, ps, rs);实际上关闭您的资源的事实。 Findbugs以相同的方法搜索实际的资源调用。