Findbugs 错误 "Load of known null value" SQL 连接
Findbugs error "Load of known null value" SQL connection
我有 DAO class 以及获取和发送数据的方法。
我在 SQL 请求中捕获异常,因此我需要在 try 括号之外声明连接变量。
每个方法看起来像这样:
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;
}
}
但是有问题。 Finbugs 给我一个错误,说:
Load of known null value in DAO.getRole
和
may fail to clean up java.sql.Statement
那么我应该怎么做才能避免这种情况?
getRole 可以 return 为空。
此外:
if (rs.next()) {
role = roleMapper.mapRow(rs, 1);
}
我更喜欢另一种表示法。不幸的是,错误解决方案包括让 getRole 抛出异常(最好)或让 return 一个 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(); //
}
我有 DAO class 以及获取和发送数据的方法。
我在 SQL 请求中捕获异常,因此我需要在 try 括号之外声明连接变量。
每个方法看起来像这样:
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;
}
}
但是有问题。 Finbugs 给我一个错误,说:
Load of known null value in DAO.getRole
和
may fail to clean up java.sql.Statement
那么我应该怎么做才能避免这种情况?
getRole 可以 return 为空。 此外:
if (rs.next()) {
role = roleMapper.mapRow(rs, 1);
}
我更喜欢另一种表示法。不幸的是,错误解决方案包括让 getRole 抛出异常(最好)或让 return 一个 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(); //
}