본문 바로가기
프로그래밍 공부/Error

[Error] The column index is out of range: 11, number of columns: 10

by Luna_lua 2023. 1. 9.
반응형

마이바티스에서 이러한 문제가 일어날때가 종종 있다. 분명 문법상 문제가 없어 보이는데 왜 이게 나오니... 라는 생각이 들때 확인을 해보자!


해결방안

1. ' (따음표)와 #,$의 문장을 확인해보자!

이것은 문법오류로 봐야 한다!

<문제점>

<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
    SELECT * FROM TABLENAME
    WHERE COLUMN1 = '#{column1}'
    AND COLUMN2 = '#{column2}'
</select>

이때는 아래와 같이 따옴표 없이 작성하거나, #을 $로 변경해주어야 한다.

<해결>

<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
    SELECT * FROM TABLENAME
    WHERE COLUMN1 = #{column1}
    AND COLUMN2 = #{column2}
</select>

또는 

<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
    SELECT * FROM TABLENAME
    WHERE COLUMN1 = '%${column1}%'
    AND COLUMN2 = '%${column2}%'
</select>

 

2.  주석이 되어있는 문구가 있는지 확인해보자!

<문제점>

<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
    SELECT * FROM TABLENAME
    WHERE COLUMN1 = #{column1}
--    AND COLUMN2 = #{column2}
</select>

아래와 같이 주석을 삭제하고 실행!

<해결>

<select id="xml ID" parameterType="TypeObject" resultType="TypeObject">
    SELECT * FROM TABLENAME
    WHERE COLUMN1 = #{column1}
</select>

이것으로 해결되지 않는다면, 파라미터에서 넘어오는것이 매핑이 다 되었는지 즉, 파라미터에 데이터가 잘못들어오거나 더 많은 매핑을 요청했는지 확인을 해봐야한다.

 

마이바티스 xml로 작성한 쿼리문과 DB쪽 쿼리문을 비교해 parameter를 넣는 작업이 필요하다 (바인딩 작업)

이 바인딩 작업은 #{}의  키워드로 바인딩할 인덱스 개수를 센다. 하지만 이 바인딩할 인덱스의 개수가 맞지 않을때 나오는 에러 문구!

즉! 매핑할 #{}개수가 2개인데 쿼리에서는 1개만 들어가야하니 매핑의 index가 맞지 않음 

반응형