以下隨筆均用於自己學習使用:
Spring中使用JdbcTemplate的queryForObject方法,當查不到數據時會拋出如下異常:
org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
org.springframework.dao.support.DataAccessUtils.(DataAccessUtils.java:97)
org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:779)
使用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時,還會拋出IncorrectResultSizeDataAccessException異常,以保證返回的記錄只有一條。
如果我們想查詢結果為空時,返回null而不是拋出異常,該怎么辦呢?
------捕獲EmptyResultDataAccessException,然后返回null-----
Object object = null;
try {
object = jdbcTemplate.queryForObject();
} catch (EmptyResultDataAccessException e) {
return null;
}
return object;