본문 바로가기
error/Spring

스프링 Mybatis 에러 :: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor

by 밍구몬 2019. 5. 10.

이 에러는 오라클에서 Long타입을 사용했을 때 MyBatis에서 Long타입을 제대로 가져오지 못해서 나는 에러다.

 

mybatis 설정 xml파일을 열어 다음의 내용을 추가해 준다.

<	!-- 오라클에서 Long타입 가져오기 위한 핸들러 -->
	<typeHandlers>
        <typeHandler handler="com.test.study.handler.CLOBHandler" javaType="String" jdbcType="LONGVARCHAR"/>
    </typeHandlers>

 

그다음 핸들러 클래스를 만들어 TypeHandler 인터페이스를 상속받아 메소드를 구현해 주면 된다.

 

CLOBHandler.java

package com.test.study.handler;

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;
 
public class CLOBHandler implements TypeHandler<Object>{
 
    @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(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getString(columnIndex);
    }

	@Override
	public Object getResult(ResultSet rs, int columnIndex) throws SQLException {
		// TODO Auto-generated method stub
		return null;
	}
}