Oracle Char Conversion

From JCFWiKi

Jump to: navigation, search

그림:check.gif

  • 산출물: 오라클 데이터베이스에서 JCF 한글처리 모듈
  • 작성자: 나윤주
  • 최초작성일 : 2008/06/13
  • 최종작성일 : 2008/06/16

Copyright © 2008 Daewoo Information Systems Co., Ltd.

그림:information.gif

  • 이 문서는 오라클 데이터베이스에서 한글을 지원하지않는 CHARSET을 사용할 경우 화면에서 한글이 깨져 보이는 문제점을 지원하기 위한 JCF 모듈에 관련된 것입니다.

목차

[편집] Type Handler

  • iBatis의 type handler는 preparedStatement에서 설정되는 파라미터 값들을 다시 셋팅하여 SQL문을 실행하고, resultSet으로 받은 결과 값들을 다시 셋팅하여 resultMap에 담아준다.
  • iBatis에서는 String, Integer, Byte 등 각 Object에 대한 기본적인 Type Handler를 제공한다.

[편집] OracleStringTypeHandler

  • 한글이 지원되지 않는 CHARSET으로 설정된 오라클 데이터베이스를 사용할 경우, 모델의 String type 변수와 데이터베이스의 VARCHAR2, CHAR, CLOB의 CharSet 변환을 도와주는 클래스이다.

그림:forbidden.gif

  • VARCHAR2, CHAR, CLOB 뿐만 아니라, 모델의 String type 변수와 연결된 데이터베이스의 모든 타입은 이 핸들러를 거치기 때문에 모델 작성에 유의해야 한다.

[편집] Implementation

  • JCF의 OracleStringTypeHandler는 iBatis의 StringTypeHandler를 확장하였다.
  • 클래스 로드시, app.properties 파일로 부터 지정된 데이터베이스와 화면의 CharSet을 설정한다.
  • 핸들러의 과정은 다음과 같다.
    • 데이터 추가/수정 시, preparedStatement의 파라미터 값을 화면 CharSet에서 데이터베이스 Charset으로 변경한다.
    • 데이터 조회 시, resultSet의 결과 값들을 데이터베이스 Charset에서 화면 CharSet으로 변경한다.
OracleStringTypeHandler의 동작
OracleStringTypeHandler의 동작

[편집] JCF의 OracleStringTypeHandler 적용하기

  • app.properties 파일 수정.
    • 아래의 코드를 추가한다.
    • dbEnc 속성: 오라클 데이터베이스의 CHARSET으로, US7ASCII를 사용할 경우 dbEnc는 ISO-8859-1로 지정해주어야 한다.
    • viewEnc 속성: 화면에서 보여질 CHARSET으로, 한글을 사용할 경우 UTF-8 또는 EUC-KR 등을 지정한다.

그림:forbidden.gif

  • 데이터베이스와 화면의 CHARSET에 따라 설정 값이 변경될 수 있으므로, 테스트 후 상황에 맞는 적절한 CHARSET을 지정하여야 한다.
###############################################################################
# for charset conversion
# @dbEnc: charset of database (oracle)
# @viewEnc: charset of view(client layer)
dbEnc=ISO-8859-1
viewEnc=UTF-8
  • sqlmap-config.xml 파일 수정.
    • typeHandler 태그의 callback 함수로 jcf.dao.ibatis.typehandler.OracleStringTypeHandler를 지정해준다.
    • jdbcType 옵션은 지정하지 않고, javaType이 String인 경우 이 핸들러가 수행된다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
		"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
 
<sqlMapConfig>
	<settings cacheModelsEnabled="true" />
	<typeHandler callback="jcf.dao.ibatis.typehandler.OracleStringTypeHandler"
		 javaType="java.lang.String" />
		 
 
	<!-- ==========Framework Configuration Section============= -->
	<!-- 중간생략 -->
 
</sqlMapConfig>
  • applicationContext.xml 파일 수정.
    • 프로퍼티 파일의 dbEnc와 viewEnc 속성을 설정하기 위해 applicationContext에서 OracleStringTypeHandler의 bean을 등록해준다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- 중간생략 -->
 
<!-- ========================= Oracle String Type Handler ========================= -->
	<bean id="oracleStringTypeHandler" class="jcf.dao.ibatis.typehandler.OracleStringTypeHandler">
		<property name="dbEnc">
			<value>${dbEnc}</value>
		</property>
		<property name="viewEnc">
			<value>${viewEnc}</value>
		</property>
	</bean>
 
<!-- 이하생략 -->