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


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

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

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0

使用Debug進行調試時,發現是在DataAccessUtils的requiredSingleResult()方法中拋出的異常。源碼如下:

public static <T> T requiredSingleResult(Collection<T> results) throws IncorrectResultSizeDataAccessException {
	if (CollectionUtils.isEmpty(results)) {
	    throw new EmptyResultDataAccessException(1);
	} else if (results.size() > 1) {
	    throw new IncorrectResultSizeDataAccessException(1, results.size());
	} else {
	    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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM