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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    会飞的鱼69阅读 24,488评论 18 392
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 21,728评论 2 81
  • 一. Java基础部分.................................................
    wy_sure阅读 2,265评论 0 9
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 228评论 0 0
  • 去年的下半年我们开始了专业实习,我们对自己未来从事的工作充满了好奇与期待,去了幼儿园觉得一切都是那么的美好,“...
    彼岸_8113阅读 36评论 0 0