EmptyResultDataAccessException 해결, jdbcTemplate.queryForObject에 관하여

2022. 8. 21. 02:08Spring

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