我想知道如何在我的情况下正确使用jdbc。
saveLinkHistory
列是mysql中的位(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;
}
查询运行良好,直到我收到Incorrect result size: expected 1, actual 0
错误,因为有时name
不存在,queryForObject
方法预计我总是得到1行
我如何处理这种情况,只是抛出一个说明" name"不存在?
顺便问一下,Boolean
好吗?因为我之前没有看到过这样的代码。
答案 0 :(得分:3)
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;
}
});
答案 1 :(得分:1)
尝试一下:
return DataAccessUtils.singleResult(jdbcTemplate.query(sql, new SingleColumnRowMapper<Boolean>(), param1, param2));