오류 분석

[오류/SQL] MyBatis 마이바티스 오류 - TypeException 부적합한 열 인덱스

somuxsomu 2024. 3. 6. 14:37

MyBatis 마이바티스 오류

 

 

TypeException : Could not set parameters for mapping

 부적합한 열 인덱스

 

 

MyBatis 오류 중

제일 자주 발생하는 오류 중

하나를 정리해보려고 한다.

 

 

혹시나 MyBatis가 어떤 역할을 하는지 모르는 사람들을 위해서

간단하게 개념을 정리해보려고 한다.

 

MyBatis(마이바티스)란? 

마이바티스는 DB(데이터베이스)를 쉽게 다룰 수 있도록 도와주는 오픈 소스 프레임 워크이다.

Object-Relational Mapping : ORM

마이바티스를 사용하여 데이터베이스쿼리와 프로그래밍 언러 코드를 분리하여 

유지보수성과 생산성을 높이기 위해 사용한다.

즉, 마이바티스를 사용하면 DB연결 및 쿼리작성을 쉽게 다룰 수 있다!

그리고, 동적 쿼리 작성이 가능하기 때문에 편리하다.

 

 

이제 해당 오류에 대해 알아보자.

아래는 콘솔창에 찍힌 에러 로그이다.


com.xxx.xxx.CommonService Impl: 213 org.mybatis.spring. MyBatisSystemException:

nested exception is org.apache.ibatis.type.TypeException : Could not set parameters for mapping:

Parameter Mapping(property= 'orderNo'. mode=IN, javaType=class java.lang.Obje ct, jdbcType=null, numericScale=null, result MapId='null', jdbcTypeName='null'. expression='null').

Cause: org.apache.ibatis.type. TypeException: Error setting non n ull for parameter #3 with JdbcType null Try setting a different JdbcType for this parameter or a different configuration property. Cause: org.apache.ibatis.type. TypeException: Error setting non null for parameter #3 with JdbcType null.

Try setting a different JdbcType for this parameter or a different configuration property.
Cause: java.sql.SQLException: 부적합한 열 인덱스


 

🔍 오류 원인

 

해당 에러는

MyBatis가 데이터베이스 열에 대한 매핑 문제로 인해

SQL 문을 실행하지 못할 때 발생한다.

 

메시지를 보면,

'Could not set parameters for mapping' 메시지가 있는데,
이뜻은 MyBatis가 인자 매핑에 문제가 있다는 것을 나타낸다.

 

 

즉, 

 

✅  PreparedStatement로 쿼리문 작성시

파라미터를 물음표로 표시하고
   "PreparedStatement변수명.setString(몇번째 물음표인지 숫자로 표시, 들어갈 값)"

위와 같은 식으로 작성하게 되는데..


   여기서 들어갈 값이 부적합해서 발생하는 에러다 !

 

 

🔍 해결 과정

 

타 업체가 제공해준 쿼리를 

내가 살짝 가공해서 UPDATE문을 만들고

테스트를 해보았는데

마이바티스 오류가 발생했다.

아무리 눈을 씻고 보아도 틀린게 없는데 거의 1시간 동안 붙잡고 있었다 . . . 

구글 검색시 나온 해결 방법들을 봐도 나는 틀린게 없는데 뭘까 했는데 . . .

 

 

업체가 제공해준 쿼리 중 일부분

BOOK_XXX = 'I’

 

 <= 이 따옴표가 문제였다 . . .

자세히 보면 ' <= 와 다른 모양을 가지고 있다.

이것 때문에 계속 오류가 발생했다. . . 

(정말 안보였음 . . )

 

 

나같은 경우에는 이런 문제였다.

구글에서 찾은 검색 결과 또는 문서등 에서

텍스트를 복사하고 붙여넣을때 특수문자기호들을 잘 확인해야한다.

 

 

제일 많이 하는 실수 중 대표적인 예 가

, (쉼표) 와 . (마침표) 이다.

 

 

이 둘도 자세히 보지 않으면 매우 비슷하게 생겼기 때문이다.

 

 

 

마지막으로,

부적합한 열 인덱스 오류가 발생하는 원인을 정리를 하면

 

 

🔍 정리

1. 변수명이 잘못된 경우

2. 쿼리의 주석에 변수가 포함되어 있는 경우

3. 파라미터(parameter)가 null 값으로 들어가는 경우

4. 쿼리문 내에 특수문자 기호 주의 

 

 

 

쿼리 작성시

한번더 확인 또 확인 하자👀