이전 학습 내용

SQL 작성 시 띄어쓰기 문제를 조심하자.

SigLee0505 2022. 12. 27. 10:30

 

 

발생 에러 

더보기

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * FROM COFFEE WHERE COFFEE_ID = : coffeeId]; nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT * FROM COFFEE WHERE COFFEE_ID = [*]: coffeeId"; expected "ALL (, ANY (, SOME ("; SQL statement:
SELECT * FROM COFFEE WHERE COFFEE_ID = : coffeeId [42001-214]] with root cause

org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT * FROM COFFEE WHERE COFFEE_ID = [*]: coffeeId"; expected "ALL (, ANY (, SOME ("; SQL statement:
SELECT * FROM COFFEE WHERE COFFEE_ID = : coffeeId [42001-214]

와 이 에러 뭔소린지 모르겠다.

더보기

; SQL statement:
SELECT * FROM COFFEE WHERE COFFEE_ID = : coffeeId [42001-214]] with root cause

다른건 뭔지 모르겠지만 이게 근원적인 오류라는 것을 알 수 있다(root cause)

초보 개발자의 입장에서 SQL을 직접 작성한 부분은 단 하나 존재하는데 그 사실을 잊고 JDBC문제인가? 라는 생각을 먼저 했다.

 

해결위한 접근 방법

1. Mapper 들을 통해 체크

지금 생각해보면 어리석은 생각이다. SQL 이 문제니 당연히 Repo 를 찾아야하는데

2. Service 체크

-------------------------------------------------------------------------------------------------------------------

여기까지는 내가 문제 해결 방향을 잘 못 잡았던 것

3. SQL 문제니 Repo를 찾자

내가 만든 CoffeeRepo에서 위의 쿼리문과 같은 쿼리문 발견

    @Query("SELECT * FROM COFFEE WHERE COFFEE_ID = : coffeeId")	//오답
    @Query("SELECT * FROM COFFEE WHERE COFFEE_ID = :coffeeId")	//정답
    Optional<Coffee> findByCoffee(Long coffeeId);

}

정답과 오답을 전부 기입했다.

당신은 한눈에 차이가 보이는가?

 

음... 생각해보면 단순하다 . SQL문은 띄어쓰기 하나에도 영향을 받는 언어다. 그렇기에 저기 보이는 띄어쓰기 한칸이 문제가 된 것

 

이걸 처음 찾고 멘붕에 빠졌다.

진짜 일반 JAVA 배울 때는 디버그를 통해 쉽게 이해했던 것 같은데 SPIRNG은 내부로 들어가는 순간 아직 정신을 못차리겠다.

 

스프링의 작동 방식은 대충 이해했다고 생각했는데 다시 한번 봐야겠다.

 

 

'이전 학습 내용' 카테고리의 다른 글

2023.02.12 백업의 충실함  (0) 2023.02.12
스트림 학습 1  (0) 2023.01.12
띠용~~ (스프링 타임리프 경로의 문제)  (0) 2022.12.26
재귀 알고리즘의 분석  (0) 2022.12.23
java 이진 검색 알고리즘  (0) 2022.12.13