Database ( DB )/Database

[mybatis] Oracle LONG, CLOB Select 시 에러날때 : getCLOB not implemented for class oracle.jdbc.driver.XXX

노루아부지 2019. 8. 11. 10:29

오라클에서는 Long Type이나 CLOB Type 컬럼을 select 할때 getCLOB() 가 구현되지 않았다면서 에러가 난다.

 

1. jdbc-context.xml ( spring 설정 파일 ) 에 mybatis-config.xml 추가

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
    p:dataSource-ref="dataSource"
    p:typeAliasesPackage="com.company.name"
    p:configLocation="/WEB-INF/spring/mybatis-config.xml" 
    p:mapperLocations="classpath*:com/company/name/oracle/*.xml" />

 

2. /WEB-INF/spring/mybatis-config.xml 파일 작성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org/DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeHandlers>
        <typeHandler handler="com.company.handler.LongHandler" javaType="String" jdbcType="LONGVARCHAR"/>
    </typeHandlers>
</configuration>

 

 

3. LongHandler.java 파일 생성

import java.io.StringReader;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LongHandler implements TypeHandler{
	private static final Logger logger = LoggerFactory.getLogger(LongHandler.class);

	// 값을 받는 중요 값
	@Override
	public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)
	throws SQLException
    {
		String s = (String) parameter;
		StringReader reader = new StringReader(s);
		ps.setCharacterStream(i, reader, s.length());
	}

	// 이외 ~로 칼럼값 불러오는 메소드
	@Override
	public Object getResult(ResultSet rs, String columnName) throws SQLException {
		return rs.getString(columnName);
	}

	@Override
	public Object getResult(ResultSet arg0, int arg1) throws SQLException {
		return arg0.getObject(arg1);
	}

	@Override
	public Object getResult(CallableStatement arg0, int arg1) throws SQLException {
		return arg0.getObject(arg1);
	}
}
728x90
loading