원인 및 내용
jdbcTemplate 사용하여 DAO 작성하고 실행시키는데 발생된 오류이다.
- org.springframework.dao.EmptyResultDataAccessException
Incorrect result size: expected 1, actual 0
예상되는 값이 1개인데 실제로는 0개를 반환해서 발생된 오류라고 한다.
이는 queryForObject를 사용하면서 발생된 오류인데,
queryForObject는 0이나 1 초과의 행이 반환되는 경우에 에러를 발생시킨다고 한다.
(1 초과의 경우 IncorrectResultSizeDataAccessException 에러 발생)
해결방안
try-catch로 예외처리를 해주면 된다.
처리 후 정상적으로 구동됨을 확인!!
@Repository
public class ImageDAO {
private final String SELECTONE = "SELECT IMAGEID, PATH, BID FROM IMAGE WHERE BID=? ORDER BY IMAGEID DESC LIMIT 1";
private final String INSERT = "INSERT INTO IMAGE (PATH,BID) VALUES(?,?)";
@Autowired
private JdbcTemplate jdbcTemplate;
public ImageDTO selectOne(ImageDTO imageDTO) {
System.out.println("=====com.koreait.app.biz.image selectOne 시작");
// 예외처리 하기 위해 return 값 저장할 변수 선언
ImageDTO data = null;
// 파라미터에 넣어 데이터를 찾을 값
Object[] args = {imageDTO.getBid()};
try {
data = jdbcTemplate.queryForObject(SELECTONE, args, new ImageRowMapper());
} catch(EmptyResultDataAccessException e){
System.out.println("=====com.koreait.app.biz.image selectOne 예외발생");
e.printStackTrace();
data=null;
}
System.out.println("=====com.koreait.app.biz.image selectOne 종료");
return data;
}
}
class ImageRowMapper implements RowMapper<ImageDTO>{
@Override
public ImageDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
ImageDTO data = new ImageDTO();
data.setBid(rs.getInt("BID"));
data.setImageid(rs.getInt("IMAGEID"));
data.setPath(rs.getString("PATH"));
return data;
}
}