본문 바로가기
Programming/오류노트

[mybatis] 부적합한 열 유형

by 도낙원 2018. 4. 25.
반응형

  오늘의 오류


스프링을 하면서 오류가 늘어났습니다. 엄청나게 기본적으로 연결되는 것이 많아서 그런지...

어쨋든 오늘 발생한 오류는 


 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


처음 사용하는 Mybatis라서 해결하는데 좀 오랜 시간이 걸렸습니다.

이 오류의 원인에는 여러가지가 있습니다.


1. 타입이 다르다.

2. map의 값을 넘길때 그 값이 NULL 이다

3. 값을 처리한 후 받아 올 때 값이 NULL 이다.


이 밖에도 다른 원인이 있겠지만 저는 map 값을 넘기지 않았습니다. 아래 설명을 해드리겠습니다.



위에 코드는 MainController 입니다.

delete코드를 실행시키기 위해서 삭제하려는 게시물의 번호(no)와 그 게시물에 해당하는 

비밀번호(password)를 받아옵니다.

받아온 것을 넘겨야하는데 이때 map을 사용했습니다. 그래서 map에 <key , value> 값으로 넣어서 

GuestDelete( ) 메소드로 보냈습니다.

map을 사용한 이유는 아래서 설명해드리겠습니다.



위 코드는 DAO 입니다. 

이곳에서 controller에서 보낸 map값을 받아서 다시 쿼리문을 실행하기 위해 값을 보내줘야 합니다.

그래서 GuestDelete( ) 메소드에서는 당연히 map으로 받아야하기 때문에 

매개변수를 map으로 하고 값을 다시 넘깁니다.

sqlSession은 mybatis를 사용하기 위한 것으로 이곳에는 DB연결과 SQL문 등이 있습니다. 

이곳으로 map에 넣은 값을 모두 전달하면 아래에서 parameterType 속성으로 map의 값을 받습니다.



받은 것을 SQL문에 넣어 실행시키면 정상적으로 작동이 됩니다.

아까 위에서 map으로 넣어서 사용했다고 했는데 그 이유는 parameterType은 무조건 하나만 받을 수 있습니다.

int 형이나 String 형 또는 우리가 만든 VO 타입 등..

즉, 현재 우리는 게시물의 번호(no)와 해당 게시물에 맞는 비밀번호(password) 두개를 받아와야 하는데 2개를 받을수 없으니 map으로 key / value 값으로 map에 넣어 보낸 것입니다.


제가 오류가 발생한 곳은 DAO에서 map값을 보내지 않은 것입니다.



제일 밑에 보시면 map 값을 SQL문에 전달을 해야 하는데 전달을 하지 않은 것입니다.

지금 커서에 있는 부분에 map이 들어가야 했습니다. 그래서 받는 SQL에서는 값이 안들어오니 위와 같은 오류를 발생 시켰습니다.


코드가 다 달라서 이해하기 어려울 것 같아 최대한 풀어서 썻지만 아마 코드 형태가 달라 

이해를 하지 못하실수도 있습니다.

그래도 도움이 됐으면 해서 이렇게 올립니다. 

반응형
사업자 정보 표시
난길샵 | 박현숙 | 경상북도 성주군 월항면 수죽길 98길 | 사업자 등록번호 : 256-07-01668 | TEL : 010-9909-8420 | Mail : skr04@naver.com | 통신판매신고번호 : 제2020-경북성주-52호 | 사이버몰의 이용약관 바로가기

댓글