PreparedStatement 사용한 like % 쿼리 문자열 합치기

자바(JAVA)

PreparedStatement 사용한 like % 쿼리 문자열 합치기

 

개발환경 : JDK 1.5, window XP

 

웹 어플리케이션 작업시 sql 쿼리를 보통 properties xml 로 문자열을 만들어 빼놓는다.

예전처럼 무식하게 쿼리를 문자열 합치기로 소스상에서 사용하지는 않는다. 여러가지 문제가

많기 때문이다.

 

쿼리에서 동적으로 변하는 데이타는 ? 를 써서 문자열을 만들고 PreparedStatement 사용해

파라미터 값을 맵핑시킨다. 아래는 스프링의 예이다. 스프링은 framework 내부에 PreparedStatement

사용해서 맵핑을 구현해 놓았고 우리가 사용하는 부분은 아래와 같이 함수에 파라미터로

? 갯수에 맞게 Objec 배열로 넘기면 된다.

 

쿼리문자열

test.srch.select = \n\

           select * from board where id = ? \n\

 

String sql = message.getMessage("test.srch.select");

getJdbcTemplate().queryForList(sql, new String[]{srchText});

 

일반적인 쿼리문자열은 이렇게 적용을 하면 되는데 문제는 like 를 사용할때 이다.

보통 사용하는 것처럼 like %?% 로 하면 안된다. % 문자와 ? 맵핑할 문자를 합쳐야 된다.

RDBMS 프로그램에 따라 차이가 있다. Oracle 일때에는  like '%' || ? || '%' 사용하면 된다.

중간에 ORM framework iBatis 를 사용할 경우에는 like '%' || #?# || '%' 이다.

 

하지만 MySql 일 경우에는 이것이 통하지 않는다. 그래서 문자열을 합치는 함수를 사용해

해결하였다. 일반적인 경우는 like concat ('%', ?, '%') 이며 iBatis 라고 한다면

like concat ('%', #?#, '%') 사용해서 처리 하면된다.


Posted by 녹두장군