daily-story
반응형

mssql 데이터 입력 시 varchar로 컬럼을 만들었더니 특수문자가 물음표로 표시되는 오류가 발생했다.

그래서 컬럼을 nvarchar로 변경하고 insert/update 시 nvarchar로 수정하려고 봤더니 그냥은 안 된단다.

 

우선 NVarchar 타입 핸들러를 만든다.

package com.iems.config;

import ch.qos.logback.classic.db.names.ColumnName;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@MappedJdbcTypes(JdbcType.NVARCHAR)
public class NVarcharTypeHandler extends BaseTypeHandler {

    private static final Logger logger = LoggerFactory.getLogger(NVarcharTypeHandler.class);

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        ps.setNString(i, (String) parameter);
    }

    @Override
    public Object getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return rs.getNString(columnName);
    }

    @Override
    public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return rs.getNString(columnIndex);
    }

    @Override
    public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return cs.getNString(columnIndex);
    }
}

 

factoryBean에 해당 내용에 대한 설정을 해주고, 

factoryBean.setTypeHandlers(
    new NVarcharTypeHandler[]{
});

 

쿼리 수정하면 끝!

#{contents,jdbcType=NVARCHAR,typeHandler=com.test.handler.NVarcharTypeHandler},

 

반응형
profile

daily-story

@덜구

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!