2016-05-30 4 views
1

データを取得して送信するメソッドを持つDAOクラスがあります。Findbugsエラー "既知のNULL値のロード" SQL接続

私はSQLリクエスト内で例外をキャッチしているので、接続変数をtry括弧の外で宣言する必要があります。

すべての方法は、このようなlookesなります

public Role getRole(int roleId) { 
    Connection connection = null; 
    ResultSet rs = null; 
    PreparedStatement statement = null; 
    Role role = null; 

    try { 
     connection = dataSource.getConnection(); 
     statement = connection.prepareStatement("select ROLE_ID, ROLE_TEXT from ROLES WHERE ROLE_ID = :1"); 
     statement.setInt(1, roleId); 
     rs = statement.executeQuery(); 
     rs.next(); 
     role = roleMapper.mapRow(rs, 1); 
    } catch (SQLException e) { 
    } finally { 
     JdbcUtils.closeResultSet(rs); 
     JdbcUtils.closeStatement(statement); 
     JdbcUtils.closeConnection(connection); 
     return role; 
    } 
} 

をしかし、問題があります。

Load of known null value in DAO.getRole

may fail to clean up java.sql.Statement 

をだから私はそれを避けるために何をすべき:Finbugsは言って、私にエラーを与えて?

+1

を返させるさせるのいずれかで構成されてい – Jens

+0

それを処理せず、例外をキャッチすることはありませんあなたがエラーを取得されるラインでは? – Jens

+0

Plsがエラーメッセージ全体を投稿 – Blobonat

答えて

0

getRoleはnullを返すことができます。 さらに:

if (rs.next()) { 
    role = roleMapper.mapRow(rs, 1); 
} 

私は別の表記が好きです。そして、エラーソリューションは、残念ながらgetRoleが例外をスロー(最高)またはOptional<Role>

//public Role getRole(int roleId) throws SQLException { 
public Optional<Role> getRole(int roleId) { 
    try (Connection connection = dataSource.getConnection(); 
      PreparedStatement statement = 
       connection.prepareStatement(
       "select ROLE_ID, ROLE_TEXT from ROLES WHERE ROLE_ID = :1")) { 
     statement.setInt(1, roleId); 
     try (ResultSet rs = statement.executeQuery()) { 
      if (rs.next()) { 
       return roleMapper.mapRow(rs, 1); 
      } 
     } 
    } catch (SQLException e) { // 
     Logger.getLogger(getClass().getName()).log(Level.SEVERE, "ID: " + roleId, e); // 
    } 
    return Optional.empty(); // 
} 
関連する問題