일단 상황은 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>
댓글 없음:
댓글 쓰기