jdbcTemplate.queryForObjecty抛EmptyResultDataAccessException异常

案发现场

使用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

你可能感兴趣的:(jdbcTemplate.queryForObjecty抛EmptyResultDataAccessException异常)