IDE/Eclipse

[MyBatis] Oracle 부적합한 열유형 Null처리 방법

헹창 2019. 8. 14.
반응형

Spring mybatis를 사용하여 Oracle Database에 data insert하는 과정에서 아래와 같은 오류가 발생했다.

 

오류 메시지

 Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #1 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 부적합한 열 유형: 1111

 

오류 발생 원인

  • 데이터 타입이 다른 경우
  • Map을 파라미터로 넘겼을 때 해당 맵안에 파라미터가 null인 경우
  • jsp view request parameter 값이 없는 경우
  • form id 또는 name 값이 없는 경우
  • ajax 모듈 사용 시 value 값이 null인 경우

 

 

 

나 같은 경우 파라미터로 넘긴 일부 컬럼의 값이 NULL 이었다.

 

myBatis, iBatis 는 Oracle을 사용할 때 Nullable Column(null 값이 들어갈 수 있는 컬럼)을 사용하기 위해 다음과 같이

값 뒤에 , jdbcType=VARCHAR 처리를 해줘야 한다.

 

INSERT INTO KTF_COMPARE_RESULT(
      COLUMN_IDX
    , COLUMN_NM
    , TIMESTAMP_ACC
    , VIN
) VALUES (
      #{columnIdx}
    , #{columnNm, jdbcType=VARCHAR}
    , #{timestampAcc, jdbcType=VARCHAR}
    , #{vin, jdbcType=VARCHAR}
)
 

 

 

가능한 타입은 다음과 같다

 

BIT FLOAT CHAR TIMESTAMP OTHER UNDEFINED
TINYINT REAL VARCHAR BINARY BLOB NVARCHAR
SMALLINT DOUBLE LONGVARCHAR VARBINARY CLOB NCHAR
INTEGER NUMERIC DATE LONGVARBINARY BOOLEAN NCLOB
BIGINT DECIMAL TIME NULL CURSOR  

 

 

그런데 !!!!

 

 

이를 해결하기 위해 jdbcType을 값 뒤에 붙이는데, 이 양이 상당히 많을 때 하나하나 언제 다 수정할 것인가...

mybatis 설정파일을 변경할 권한이 있는 경우

 

 

context-mapper.xml 파일을 열면 property name이 configLocation 인 것을 찾고, 그 value 값에 나와있는 경로를 찾아가면 된다.

 

 

 

그 경로를 찾아가서 configuration 태그 아래 settings 이라는 태그에 setting 프로퍼티를 추가 한다.  

 

<setting name="jdbcTypeForNull" value="NULL" />

 

<settings>
    <setting name="cacheEnabled" value="false" />
    <setting name="jdbcTypeForNull" value="NULL" />
</settings>
 

context-mapper.xml 에서 찾지 못했다면

 

전자정부 프레임워크를 사용하는 경우  context-sqlMap.xml 파일을 열어서 위와 같이 경로를 찾아가면 된다.

 

 

context-sqlMal.xml 파일은 DB 쿼리 SQL 파일 위치 및 설정 하는 것이고, 

 

context-mapper.xml 는 DB 쿼리 이후 VO(Value Object) 객체에 대한 맵핑을 iBatis나 MyBatis 등을 사용해서 할수 있도록 설정 하는 차이가 있다.

 

 

728x90
반응형

댓글

추천 글