개발자

sql문 부적합합니다..

2024년 01월 31일조회 590

spring boot 4 에서 웹개발프로젝트를 진행중입니다.. jsp페이지에서 받아온 searchText값을 쿼리문으로 비교 후 foodinfolist를 반환해주는데 sql developer에서는 SELECT * FROM foodinfolist WHERE food_name LIKE '%' || '치킨' || '%'; 해당 코드가 정상동작 돼서 잘 검색하지만 mapper.xml에서 <mapper namespace="com.springproj.dietwebservice.repository.IFoodInfoDAO"> <select id="findfoodinfo" parameterType="java.lang.String" resultType="com.springproj.dietwebservice.domain.FoodInfoVO">> <![CDATA[ SELECT * FROM foodinfolist WHERE food_name LIKE '%' || #{searchText} || '%' ]]> </select> </mapper> 해당 코드를 실행하면 sql문이 부적합합니다 라고 에러가 발생합니다.. 뭐가 문제인지 모르겠습니다.. searchText: 치킨 으로 데이터도 잘 담겨오는데.. 2024-01-31T16:24:22.500+09:00 ERROR 8208 --- [nio-8090-exec-9] o.a.c.c.C.[.[.[/].[dispatcherServlet]  : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: ORA-00900: SQL 문이 부적합합니다 선배님들 조언부탁드립니다..

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 4

류호준님의 프로필 사진

완전히 같은 텍스트인데 문제가 있다면 특수문자 인코딩 문제라던지 세미콜론같은 부분을 의심 해 보시기 바랍니다. 디버깅의 기본은 파티셔닝 입니다. 쿼리를 좀 더 간단하게 만들어서 (특수문자등 제외) 그 상태에서는 돌아가는지 확인 해보는 등 문제가 있을 수 있는곳과 문제가 없는곳을 구분지어가면서 문제가 있을 수 있는 영역을 점점 좁혀가면서 디버깅 해 보세요

김태현님의 프로필 사진

김태현

작성자

서울it아카데미 컴퓨터정보전자과2024년 01월 31일

답변 감사합니다 조언 주신대로 한번 찾아보겠습니다!!

김태현님의 프로필 사진

<mapper namespace="com.springproj.dietwebservice.repository.IFoodInfoDAO"> <select id="findfoodinfo" parameterType="java.lang.String" resultType="com.springproj.dietwebservice.domain.FoodInfoVO"> SELECT * FROM foodinfolist WHERE food_name LIKE '%' || #{searchText} || '%' </select> </mapper> 이렇게 수정했는데 정상작동 됩니다.. 답변 감사합니다..

남기웅님의 프로필 사진

CDATA 는 mybatis 에서 비교연산자( > 혹은 < )를 사용할 경우 xml 문법이 새로 열리거나 닫히는 문제때문에 보통 사용합니다. 그래서 비교연산자를 이용하는 경우가 아니르면 chatGpt 가 달아놓은 답변처럼 concat 함수를 사용해서 검색할 문자열을 만들면 됩니다. 그 외엔 sql developer 등의 툴에서 동작하는 쿼리를 거의 그대로 사용 가능합니다. 다만 먼저 말씀드린 경우처럼 비교연산자를 써야하는데 CDATA 문법이 번거롭고 가독성이 떨어질 경우를 대비해 mybatis에서는 &gt;(>) &lt;(<) 로 치환해서 사용 가능합니다.

!helloworld님의 프로필 사진

요즘도 mybais로 교육하나보네요ㅠㅠ 시장은 JPA인데

김태현님의 프로필 사진

김태현

작성자

서울it아카데미 컴퓨터정보전자과2024년 02월 12일

JPA도 교육했습니다! 다만 팀프로젝트에서 선택을 mybatis로 진행했습니다!! 추후 개인프로젝트때 같은 내용으로 jpa로 작업해보겠습니다 답변 감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!