案发现场
使用jdbcTemplate.queryForObjecty
查询数据库中不存在的实体,不是返回null而是直接抛了 EmptyResultDataAccessException
异常。
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
案情分析
通过查看 queryForObjecty
源码,发现queryForObjecty
最终调用了query
方法,当query返回null或者size为0的时候,就会抛EmptyResultDataAccessException
异常,源码片段如下:
int size = (results != null ? results.size() : 0);
if (size == 0) {
throw new EmptyResultDataAccessException(1);
}
if (results.size() > 1) {
throw new IncorrectResultSizeDataAccessException(1, size);
}
return results.iterator().next();
关联案件
从源码中不难看出,当size>1的时候,会抛出IncorrectResultSizeDataAccessException异常
结案定论
使用queryForObjecty
查询数据库对象的时候千万要记得处理这两个情况的异常,也就是说数据库中没有要查询的对象或者查询的对象不止一个的时候会抛异常。
而queryForList方法则没有这些异常,但是由于其返回的类型是List,所以在h
网友评论