MyBatis Bad SQL GrammarMyBatis Bad SQL Grammar ErrorMyBatis Bad SQL Grammar 에러MyBatis Bad SQL Grammar 문제bad SQL grammer

MyBatis에서 발생하는 Bad SQL Grammar 에러 해결: 세미콜론(;) 문제 확인하기

KUKJIN LEE
KUKJIN LEE
2024년 5월 24일
229

SQL 문법에 문제가 있을 때 발생하는데, 특히 세미콜론(;) 사용과 관련된 문제로 자주 발생합니다.

 

1. bad SQL grammar 오류란?

MyBatis에서 bad SQL grammar 오류는 SQL 문이 잘못되었을 때 발생합니다. 이는 SQL 문법 오류로 인해 데이터베이스와의 상호작용이 실패할 때 나타납니다. MyBatis는 SQL 문을 실행하기 전 컴파일 단계에서 이를 확인합니다.

 

### Error updating database.  Cause: java.sql.SQLException: ORA-00911: invalid character
; bad SQL grammar [];
nested exception is java.sql.SQLException: ORA-00911: invalid character

2. 세미콜론(;) 문제

SQL 문법에서 세미콜론은 SQL 문장을 구분하는 용도로 사용됩니다. 그러나 MyBatis와 같은 ORM(Object-Relational Mapping) 프레임워크에서 세미콜론은 불필요하거나, 오히려 오류를 일으킬 수 있습니다. 이는 MyBatis가 자동으로 SQL 문장을 구분하고 실행하기 때문입니다.

 

예시)

<update id="updateUser" parameterType="map">
  UPDATE users
  SET name = #{name}, email = #{email}
  WHERE id = #{id};
</update>

 

세미콜론(;)이 SQL 문 끝에 포함되어 있어서 bad SQL grammar 오류가 발생할 수 있습니다.

 

3. 해결 방법

해결 방법은 간단합니다. MyBatis XML 매퍼 파일에서 SQL 문 끝에 있는 세미콜론을 제거하면 됩니다.

세미콜론을 제거함으로써 SQL 문이 올바르게 실행되고, bad SQL grammar 오류가 발생하지 않습니다.

 

관련 글

[SQL 입문] 필요한 데이터만 콕 집어 가져올 수 있는 WHERE 절

사용자는 테이블에 있는 모든 데이터를 다 보고 싶어 하지는 않습니다. 오히려 특정 항목에 대한 데이터만 가져오고 싶을 때가 훨씬 많습니다. 예를 들어, 어떤 사용자의 이메일이나 ID는 알고 있는데, 그 사람이 언제 우리 앱에 가입했는지 확인하고 싶다고 가정해 봅시다...

2026년 1월 27일10

SQL에서 SELECT란 무엇인가?

데이터베이스를 거대한 서류 보관함이라고 생각하면 됩니다. 보관함 안에는 수많은 데이터가 차곡차곡 쌓입니다. SELECT는 이 보관함에서 "내가 원하는 정보를 찾아줘!"라고 요청하는 명령어입니다. 이 과정을 전문 용어로 '쿼리(Query)'라고 부릅니다. &amp;nbs...

2026년 1월 26일10

[SQL 기초] "언제 하나씩 다 넣어?" 데이터 한 번에 넣기

개발을 하다 보면 데이터베이스(DB)에 샘플 데이터를 대량으로 넣어야 할 때가 있습니다. 메뉴 100개를 추가해야 하는데 INSERT 문을 100번 쓰고 있다면? 너무 비효율적이죠! 오늘은 SQL에서 여러 데이터를 한 번에 넣는 '다중 삽입(Multiple Inse...

2026년 1월 21일13

SQL 데이터 삽입하기

데이터가 없는 데이터베이스는 연료 없는 로켓과 같습니다. 이제 'Missions' 테이블에 새로운 행(row)을 추가하는 방법을 알아보겠습니다. "삽입(Inserting)"은 '데이터 추가'를 의미합니다. 기존 Missions 테이블 ...

2026년 1월 20일12