Spring EmptyResultDataAccessException异常的源码分析和解决方法

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取10G资料包与项目实战视频资料
在spring中使用jdbcTemplate的queryForObject()方法时,如果查询的结果为空是会出现如下错误信息 ``` org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 org.springframework.dao.support.DataAccessUtils.(DataAccessUtils.java:71) org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:729) ``` ``` ``` ``` 经查看源码时发现 找到requiredSingleResult方法: ``` 1. **public****static** T requiredSingleResult(Collection results) **throws** IncorrectResultSizeDataAccessException \{ 2. **int** size = (results != **null** ? results.size() : 0); 3. **if** (size == 0) \{ 4. **throw****new** EmptyResultDataAccessException(1); 5. \} 6. **if** (results.size() > 1) \{ 7. **throw****new** IncorrectResultSizeDataAccessException(1, size); 8. \} 9. **return** results.iterator().next(); 10. \} 发现 当查询的result为空时,size赋值为0,并抛出EmptyResultDataAccessException异常,此为原因所在。猜测Spring这样设计可能是为了防止用户不对空值做出判断,保证了程序的健壮性。同时,当results的size大于1时同样会抛出异常,以保证返回单一的Object。 解决方法:就是在该方法上捕获异常即可 public boolean login(UsersBean usersBean) \{ // TODO Auto-generated method stub String sqlTemp = tradeSqlConfig.getSql(“login\_user”); String result; try \{ result = jdbcTemplate.queryForObject(sqlTemp,new Object\[\]\{usersBean.getUserId(),usersBean.getPassword()\},String.class); \} catch (DataAccessException e) \{ result=null; \} return result != null ? true : false; \} ------- 来源:[http://ddrv.cn/a/88268](http://ddrv.cn/a/88268)
赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Spring EmptyResultDataAccessException异常的源码分析和解决方法

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏