본문 바로가기

프레임워크/iBATIS

JZ0SB: 매개변수 인덱스가 범위를 벗어났습니다. 1.

iBatis + Sybase ASE 15.5 (ISO1) + JavaSE 6(JDK1.6.0_21) 환경에서...

제목과 같은 예외가 발생했다. 실행한 SQL은 다음과 같다.
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="CM_CommonCode">

<!-- TODO 테스트를 위한 공통코드 업데이트 -->
<update id="updateCommonCode" parameterClass="CommonCode">
update
  IDCM..TC_CMN_CODE
set
  code_wrth_abrv_name = '테스트'
where code_id = #codeId#
  and code_wrth = #codeWrth#
</update>

</sqlMap>

그냥 지극히 평범한 SQL인데 왜 에러를 내는 것일까? 
문제의 원인은 Encode(Charset)에 있었다. 즉, 매핑 XML이 <?xml version="1.0" encoding="UTF-8"?>와 같이 UTF-8으로 선언되어 있고 DB는 ISO1로 선언되어 있어서 코드를 변환했을 때 에러가 나는 것이었다. 만약 한글을 직접넣고 싶다면 UTF-8을 EUC-KR로 변경하면 정상처리된다.