- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Link
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[MyBatis] 쿼리 파라미터 null 처리방법 본문
myBatis와 iBatis에서 쿼리를 실행할때 PrepareStatement 방식으로 작동을 하게 되고 이때 쿼리로 전달값은 값을 각각 아래처럼 적용한다.
그런데 이때 insert 하려는 값 중에 null이 전달되었을 경우 오라클에서는
위와 같이 전달되는 파라미터 값의 jdbcType이 무엇인지를 정해 주면 쿼리는 자연스럽게 null로 변경되어 insert query가 수행된다.(물론 해당 column이 NULL값을 저장가능한 column 이어야 한다) 지원하는 jdbcType은 아래와 같다.
1
2
3
4
5
6
7
8
9 |
<!-- ibatis 방식--> < insert id = "insertQuery" parameterType = "java.util.Map" > INSERT INTO table (id , name, title) VALUES (#id#, #name#, #title#) </ select > <!-- mybatis 방식 --> < insert id = "insertQuery" > INSERT INTO table (id , name, title) VALUES (#{id}, #{name}, #{title}) </ insert >
|
이런 에러를 발생시키게 된다. Spring을 사용했을 경우는 이런에러를 발생시킨다.uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 부적합한 열 유형: 1111; nested exception is java.sql.SQLException: 부적합한 열 유형: 1111
그렇다고 항상 쿼리에서 null을 체크하는 방식을 사용하는것은 너무나도 귀찮은 일!! 그래서 if(myBatis)문 혹은 isNotEmpty(ibatis)를 사용하지 않는 방법이 있다. (자세히 보면 Spring Framework에서 발생시키는 에러에 답이있다.)Caused by: org.springframework.jdbc.UncategorizedSQLException: Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: java.sql.SQLException : 부적합한 열 유형: 1111
1
2
3
4
5
6
7
8
9 |
<!-- ibatis 방식--> < insert id = "insertQuery" parameterType = "java.util.Map" > INSERT INTO table (id , name, title) VALUES (#id:VARCHAR#, #name:VARCHAR#, #title:VARCHAR#) </ insert > <!-- mybatis 방식 --> < insert id = "insertQuery" > INSERT INTO table (id , name, title) VALUES (#{id, jdbcType=VARCHAR}, #{name, jdbcType=VARCHAR}, #{title, jdbcType=VARCHAR}) </ insert >
|
- 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
'★─Programing > ☆─WebProgram' 카테고리의 다른 글
[Spring] 스프링과 Tiles 2 (0) | 2016.05.18 |
---|---|
[JSTL] <c:out> <c:set> <c:remove> <c:catch> 태그 (0) | 2016.05.16 |
[MyBatis] Mapper XML File 이란? (0) | 2016.04.28 |
[HTML] HTML 특수문자표, ( 숫자표현,문자표현 ) 코드표 (0) | 2013.05.06 |
[XML] xml nbsp 처리 문제 (0) | 2013.03.29 |
Comments