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 ('%', #?#, '%') 사용해서 처리 하면된다.
'자바(JAVA)' 카테고리의 다른 글
아파치에서 배포하는 HttpClient 3.x 를 이용해 네트워크 데이터 전송 (5) | 2010.07.30 |
---|---|
JAVA 에서 데이터 교환을 위해 JSON 사용하기 (0) | 2010.07.20 |
google SMTP 를 이용해서 java 에서 Email 보내기 테스트 (1) | 2010.07.19 |
Spring 에서 트랜잭션 설정시 NoClassDefFoundError TransactionManager 에러 (0) | 2010.07.18 |
cannot call getWriter() after getOutputStream() 에러 (0) | 2009.09.25 |
(5) HSQLDB 과 Spring framework - DBUnit 테스트 환경을 만들어 본다. (0) | 2009.09.09 |
(4) HSQLDB 과 Spring Framework - spring framework 에서 hsqldb 연동테스트 (0) | 2009.09.05 |
(3) HSQLDB 과 Spring Framework - eclipse 의 DB Explorer 를 통한 데이타확인 (0) | 2009.09.05 |