EmptyResultDataAccessException 해결, jdbcTemplate.queryForObject에 관하여
2022. 8. 21. 02:08ㆍSpring
728x90
오류 메세지를 살펴보면, jdbcTemplate.queryForObject를 사용하여 어떠한 문제가 발생하여 EmptyRusultDataAccessException이 발생하였다.
먼저 queryForObject 메소드는 아래와 같습니다.
public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException {
List<T> results = query(sql, args, new RowMapperResultSetExtractor<T>(rowMapper, 1));
return DataAccessUtils.requiredSingleResult(results);
}
이 메소드는 반드시 하나의 행을 반환해야하고 그것이 아니면, IncorrectResultSizeDataAccessException이 발생합니다.
따라서, 예외처리를 위해 try-catch 사용하여 null값을 반환는 방법이 있습니다.
public UserVO getUser(UserVO vo) {
System.out.println("getUser() 기능 처리");
Object[] args = {vo.getId(),vo.getPassword()};
try {
return jdbcTemplate.queryForObject(getUserSql,new UserRowMapper(),args);
}catch(IncorrectResultSizeDataAccessException error){
return null;
}
}
(try-catch가 성능상의 문제가 될 수 있다고 하는 데 아직 잘 이해가 되질 않습니다. 이 부분도 추후에 공부를 해봐야할 것 같습니다.)
제가 그럼에도 불구하고, try-catch를 사용한 이유는 null값을 반환하여 사용했어야 되기 때문입니다.(로그인 체크 관련)
또는, Optional이라는 것을 사용할 수도 있다고 하는 데 이것은 프로젝트를 만들고 공부를 해봐야 할 것 같습니다.
어쩌다 보니 공부할 것이 계속 쌓여갑니다....ㅎㅎ
열공하세요!~
728x90
'Spring' 카테고리의 다른 글
파일 업로드 - BindException 에러 해결, multipart (0) | 2022.08.26 |
---|---|
@ModelAttribute의 특징 (0) | 2022.08.25 |
BeanCreationException, NoSuchBeanDefinitionException 에러 해결 (0) | 2022.08.19 |
this.userDAO is null - NullPointerException (0) | 2022.08.19 |
Spring MVC 구조(2) (0) | 2022.07.29 |