2017-03-28 22 views
1

我想知道如何在我的情况下正确使用jdbc。如何处理jdbc.queryForObject,如果它不返回一行

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

我的问题有什么问题,因为没有人似乎至少发表评论呢? – Oleg

+0

您的问题标题似乎与实际问题没有关系。 –

+0

@MarkRotteveel谢谢,我会改变它然后 – Oleg

回答

2

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; 
    } 
}); 
相关问题