Language/Java, Jsp

jstl sql:query 쉽게 사용하기

__bo0o_ 2022. 3. 31. 23:36

뭔가 jstl sql문을 대충 빠르고 간단하게 쓰고 싶었는데

생각보다 검색을 많이 해야하기도 했고

검색하면서도 뭔가 정리가 안된 느낌이 들기도 해서

따로 간단하고 보기 편하게 포스팅 해봅니다.

 

1. 태그 라이브러리 선언

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

 

2. sql:setDataSource를 사용하여 DB 연결

...

pageContext.setAttribute("dbconnectUrl", dbconnectUrl);
pageContext.setAttribute("Db_USER", Db_USER);
pageContext.setAttribute("Db_PASS", Db_PASS);

...

<sql:setDataSource 
    url="${dbconnectUrl}" // ex) jdbc:mariadb://url:dbport/dbname
    user="${Db_USER}"
    password="${Db_PASS}" 
    var="dataSource" 
    scope="application"/>

데이터베이스에 접속하기 위한 Data Source를 생성

 

3. sql:query를 이용하여 SQL query문 실행

<c:set var="rs_point_query" 
	value="select a.*, (select c_pass from ... = ${item.team_no} and c_use = 0 ) as c_exp ... where a.c_home = ${c_home} and ... order by a.c_no asc" />
// 이런식으로 쿼리에 동적으로 변하는 변수 사용하여 넣는 것도 가능

// <c:out value="${rs_point_query}" /> 
// c:out로 query 확인하고 싶을 경우

<sql:query var="result" dataSource="${dataSource}"
  sql="${rs_point_query}" />

 

4. Query 결과 확인

// 결과 확인
<c:forEach var="row" items="${result.rows}">
  <c:choose>
    <c:when test="${row['c_result'] eq 0}">
      <c:when test="${row['c_now'] eq 0}">
        <div class="content__table--btn btn-applying">
          <a href="#none" class="cursor-default">접수</a>
        </div>
      </c:when>
      
      ...

쿼리문 결과 출력에는 검색해보면 여러가지 방법이 있는데

(columnNames, rowsByIndex 등)

저는 그냥 간단하게 컬럼명을 통해 출력해줄거라서

${result.rows} 값을 가져와서

${row['컬럼명']}

이런식으로 필요하신 컬럼 쉽게 가져오시면 됩니다.

 

5. Query 전체 결과 개수 확인

<c:if test="${result.rowCount eq 0}">
	// 데이터가 비었을 때
</c:if>

데이터가 비었을 때와 같은 처리를 해주기 위해

쿼리 결과의 전체 결과 개수를 알아야한다면

${result.rowCount}를 사용하시길 바랍니다.

 

 

https://intrepidgeeks.com/tutorial/introduction-to-jstl-sql-tag

http://ojc.asia/bbs/board.php?bo_table=LecServletJSP&wr_id=173 

반응형