如果 jdbc.queryForObject 不返回行,如何处理它

Ole*_*leg 2 mysql sql jdbc spring-jdbc jdbctemplate

我想知道如何在我的情况下正确使用 jdbc。

saveLinkHistory列是 mysql 中的 bit(1) 类型。

public boolean getIsSavedLinkHistory(String name) {
        String sql = "select saveLinkHistory from users where name = ?";
        Boolean isTracked = jdbcTemplateObject.queryForObject(sql, new Object[] { name }, Boolean.class);
        return isTracked;
}
Run Code Online (Sandbox Code Playgroud)

查询运行良好,直到出现错误,Incorrect result size: expected 1, actual 0因为有时name不存在,该queryForObject方法期望我总是得到 1 行作为结果。

我该如何处理这种情况,只是抛出一个异常,说“名称”不存在?顺便说一句,Boolean这里可以吗?因为我之前没有看到这样的代码。

小智 7

JdbcTemplate 的 queryForObject 方法期望您的查询应始终返回一行,否则它将抛出 EmptyResultDataAccessException。您可以简单地使用 ResultSetExtractor 的查询方法而不是 queryForObject。ResultSetExtractor - extractData(ResultSet rs) 方法将返回任意结果对象,如果没有返回数据则返回 null。如果返回 null,您可以抛出相关异常。

 return jdbc.query(sql, new ResultSetExtractor<Boolean>() {
    @Override
    public Boolean extractData(ResultSet rs) throws SQLException,
                                                   DataAccessException {
        return rs.next() ? rs.getBoolean("column_name") : null;
    }
});
Run Code Online (Sandbox Code Playgroud)


Ari*_*iel 6

尝试这个:

return DataAccessUtils.singleResult(jdbcTemplate.query(sql, new SingleColumnRowMapper<Boolean>(), param1, param2));
Run Code Online (Sandbox Code Playgroud)