2007년 10월 17일 수요일

JSTL <sql:query> 에서 where 조건검색시 한글이 안먹힐때

일단 상황은 Altibase4에 웹페이지를 죄다 UTF-8로 세팅해서 쓰고 있는 경우.

주소록에서 특정인의 이름을 받아서 like 검색을 하려고 했다.


query 파라메터로 받은 값을 이용해서


    <sql:query var="addrlist" dataSource="jdbc/mmsgw">
        select * from tbl_address where group_id in (
            select group_id from tbl_addrbook_group where user_id = 'hitchi'
        ) and user_name like '%<c:out value="${param.query}"/>%'

    </sql:query>


로 하려고 했으나 계속 한글인식이 안되는 상황, <%= %> 로 해도 마찬가지고...


얼마전 Servlet 쪽에서 한글검색하다가 유사한 상황이 있었을 경우 PreparedStatement 로 해결했던 경험이 있어, 똑같이 서블릿으로 분리하려고 했으나, '너무' 간단한 기능이고 또 분리하기도 귀찮고, 결정적으로 고칠때 고치더라도 'JSTL' 상에서 꼭 해결해 보고 싶었다.


JSTL에서 PreparedStatement 로 쿼리하는 방법은 <sql:param> 을 이용하는 것이다.

물론 한글도 잘되고~

코드에 사용한 JSTL은 다음과 같다.


<c:choose>
<c:when test="${param.query != null}">
    <sql:query var="addrlist" dataSource="jdbc/mmsgw">
        select * from tbl_address where group_id in (
            select group_id from tbl_addrbook_group where user_id = 'hitchi'
        ) and user_name like ?
        <sql:param value="%${param.query}%"/>
    </sql:query>
</c:when>
<c:otherwise>
    <sql:query var="addrlist" dataSource="jdbc/mmsgw">
        select * from tbl_address where group_id in (
            select group_id from tbl_addrbook_group where user_id = 'hitchi'
        )
    </sql:query>
</c:otherwise>
</c:choose>

댓글 없음:

댓글 쓰기

가장 많이 본 글