Spring中EmptyResultDataAccessException異常產生的原理及處理方法

Spring中使用JdbcTemplate的queryForObject方法,當查不到數據時會拋出以下異常:java

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)
使用Debug進行調試時,發現是在DataAccessUtils的requiredSingleResult()方法中拋出的異常。
源碼以下:
    public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
         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();
     }
能夠看出,當results爲空時,就會拋出EmptyResultDataAccessException異常,Spring這樣作的目的是爲了防止程序員不對空值進行判斷,保證了程序的健壯性。另外,當results的size大於1時,還會
當results的size大於1時,還會拋出IncorrectResultSizeDataAccessException異常,以保證返回的記錄只有一條。
若是咱們想查詢結果爲空時,返回null而不是拋出異常,該怎麼辦呢?
很簡單,只須要在捕獲EmptyResultDataAccessException,而後返回null,代碼以下:
        Object object = null;
        try {
            object = jdbcTemplate.queryForObject();
        } catch (EmptyResultDataAccessException e) {
            return null;
        }
        return object;程序員

--------------------- 
做者:愛上香鍋的麻辣 
來源:CSDN 
原文:https://blog.csdn.net/u011983531/article/details/48858261 
版權聲明:本文爲博主原創文章,轉載請附上博文連接!spring

相關文章
相關標籤/搜索