jdbcTemplate DELETE FROM Parameter index out of range

p1atina·2021년 9월 10일
0

에러코드

org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [DELETE FROM customers]; Parameter index out of range (1 > number of parameters, which is 0).; nested exception is java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).


테스트코드 중 deleteAll()을 하면 지워져야 하는데, 에러를 발생하면서 실행이 안됩니다.
사실 logger를 찍어봤으면 바로 알수 있었겠지만, 아직 초보자 입장에선 이런 에러가 뜨면 감도 안 잡힙니다.

        jdbcTemplate.getJdbcTemplate().update("DELETE FROM customers"); // 정상 작동
        jdbcTemplate.update("DELETE FROM customers", Collections.emptyMap()); // 정상 작동
        jdbcTemplate.getJdbcTemplate().update("DELETE FROM customers", Collections.emptyMap()); // 잘못된 코드

문제는 강의를 보다가, Collections.emptyMap()을 파라미터로 전달하는 코드에는 getJdbcTemplate()를 뺴고 써야하는데, 놓친 거였습니다.

  • jdbcTemplate.getJdbcTemplate().update("DELETE FROM customers"); 경우
  • jdbcTemplate.update("DELETE FROM customers", Collections.emptyMap()); 경우

하지만 초보자 입장에선 SQL문만 틀렸다고 생각하기 때문에 DELETE 만 수십번 고치다가,
update에 블럭지정 후 Ctrl + B 혹은 Ctrl누른채로 클릭하면 정의된 class파일 내부 소스코드를 볼 수 있는데, 저렇게 파라미터 전달값을 보고 내가 제대로 전달하는지 확인할수 있습니다.

앞으로 에러들이 발생하면 초보자라면 이러한 방법으로 찾기를 권장드립니다.

profile
나상원의 LOG

0개의 댓글