[ORACLE] Error setting null parameter. Cause: java.sql.SQLException: 부적합한 열 유형

이호인·2022년 3월 24일
0

ERROR

목록 보기
7/8

에러 발생 : Cause: org.apache.ibatis.type.TypeException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException: 부적합한 열 유형

  • 부적합한 열 유형 1111 에러가 발생했다.
  • SPRING에서 my-batis를 이용하여 Insert, Update를 할 때 넣어줄 파라미터 #이 null 일 경우 에러가 발생한다.
  • 방법은 2가지였다.

1. my-batis 설정 파일에 settings 추가하기

<settings>
	<setting value="VARCHAR" name="jdbcTypeForNull">
</settings>
  • jdbcType에 설정할 수 있는 값은 다음과 같다.
    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

  • properties 보다 아래, typeAlias보다 위에 작성하면 된다고 한다. 내가 해본 결과 무한 로딩이 걸려 실패 !

2. 각 파라미터 값에 jdbcType 설정하기

<update id='saveBoard'>
	INSERT INTO boardTable(title, board_id)
    VALUES(#{title, jdbcType=VARCHAR}, #{boardId,jdbcType=INTEGER})
</update>
  • 이 방법도 해결해주지 않았다. 후

그래서 해결한 방법은

  • 이 에러가 발생한 이유가 글을 등록하고 수정하는 기능을 글을 저장하는 기능 하나로 보고 작업해서 saveRequest라는 DTO를 parameter 값으로 받고 있었다.
  • 오라클의 merge into를 사용해서 글의 id(number형) 가 존재하면 수정, 존재하지 않으면 새 글 등록으로 작동하게 된다.
  • 그런데 등록할 때는 작성자의 아이디가 필요하니 데이터를 담아서 오는데, 수정할 땐 이미 있는 정보니 따로 넣어주질 않아 null 값인 상태로 들어오게 되었던 것
  • 아직 공부하는 학생이라 정답은 아닐 수도 있고, 또 이게 최선은 아니라고 생각은 하지만 결국 비어있는 값을 채워주면 된다고 생각했고 , hidden으로 빈 값들을 채워서 넘겨 받으니 에러가 해결되었다.

reference!

https://mine-it-record.tistory.com/263

profile
공부 기록

0개의 댓글