这在我脑海中持续了很长时间,我仍然想知道为什么 spring jdbc 将 EmptyResultDataAccessException
作为运行时异常,而不是强制调用方法(通过生成异常)来捕获 EmptyResultDataAccessException,我个人遇到了一个问题,当我第一次实现 spring jdbc 时,让我们采取第一个场景
public List<User> getUsers(String firstName){
JdbcTemplate jd = this.getJdbcTemplate();
List<User> userLst = jd.query("select query for user here matched firstname", BeanPropertyRowmapper(User.class))
}
在上述场景中,即使此 select 查询不返回任何值,spring jdbc 仍会创建 user 类型的新 List 对象并返回大小为 0 的列表对象。因此,这里 spring jdbc 不会抛出 EmptyResultDataAccessException ,而是在没有从 DB 获取记录的情况下创建新的 List 对象。
其次,如果查询一个对象,它的行为会有所不同。
User user = jd.queryForObject("select * from user where user_id = [EDITuser id here", User.class)
这里 spring jdbc 会抛出 EmptyResultDataAccessException,以防它找不到 *user_id = 1* 的任何记录。
此外,由于 EmptyResultDataAccessException 是运行时异常,因此我没有被迫捕获此异常并针对此异常执行某些操作,因此大多数时候开发人员感到困惑并且没有注意到。
正如我在第一个场景中所说,当我第一次编码时,我期望 userLst 对象为 null,但实际上 spring jdbc 创建了我们没有处理它的新对象。发布此内容是为了让自己清楚这方面的情况。谢谢
最佳答案
很可能没有办法让每个人都高兴。相反,您完全知道该行存在,因为它是有效的 ID。然而,调用此方法会强制您捕获这个永远不会抛出的异常,因此您有一个空的 catch block ,这是不好的。
这可以追溯到运行时异常与检查异常的使用,本网站和其他地方有大量引用资料。
关于java - EmptyResultDataAccessException 作为运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22831322/