05.JSP2008. 11. 6. 14:30
반응형

4. SQL Tag

sql 태그를 사용하기 위해서 페이지 상단에 다음과 같이 선언되어야 된다.
<%@ taglib uri="http://java.sun.com/jstl/sql" prefix="sql"%>

DataSource 를 이용해서 SQL을 처리하는 sql 태그는 다음과 같은 것들이 있다.

기능 태그 prefix
DataSource 설정 SetDataSource sql
SQL query (dateParam, param) , update (dateParam, param) , transaction sql

4.1 <sql:setDataSource/>

javax.sql.DataSource의 인스턴스를 얻을 수 있다.

<sql:setDataSource
{dataSource="dataSource" |url="jdbcUrl"
[driver="driverClassName"]
[user="userName"]
[password="password"]}
[var="varName"]
[scope="{page|request|session|application}"]/>

4.2 <sql:query/>

쿼리 실행.
JDBC의 java.sql.PreparedStatement 인터페이스에 기반한 방식을 사용하여 매개변수화 된다.
매개변수 값은 중첩된 <sql:param>과 <sql:dateParam> 태그를 사용하여 지정된다.

<%@ page pageEncoding="MS949" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<fmt:setLocale value="ko" />
<sql:query var="emp"
        dataSource="jdbc/myora81">
SELECT  EMPNO AS 사원번호, ENAME AS 이름,
            SAL AS 월급여, HIREDATE AS 입사일
FROM EMP
</sql:query>

<table border="1">
  <tr>
<%-- 필드의 정보를 출력한다.            --%>
  <c:forEach var="columnName" items="${emp.columnNames}">
    <th><c:out value="${columnName}"/></th>
  </c:forEach>

<%-- 데이터를 한 줄씩 출력한다.         --%>
  <c:forEach var="row" items="${emp.rowsByIndex}">
    <tr>
<%-- 필드의 길이만큼 반복한다.          --%>
      <c:forEach var="column" items="${row}" varStatus="i">
        <c:choose>
          <c:when test="${i.index==3}">
      <td><fmt:formatDate value="${column}" pattern="yyyy/MM/dd"/></td>
          </c:when>
          <c:otherwise>
      <td><c:out value="${column}"/></td>
          </c:otherwise>
        </c:choose>
      </c:forEach>
  </c:forEach>
</table>
<hr>

<table border="1">
  <c:forEach var="row" items="${emp.rows}">
  <tr>
    <td>번호: <c:out value="${row['사원번호']}"/></td>
    <td>이름: <c:out value="${row['이름']}"/></td>
  </tr>
  </c:forEach>
</table>

4.3 <sql:dateParam/> , <sql:param/>

<sql:dateParam/>은 java.sql.PreparedStatement.setTimestamp() 역할을 하고,
<sql:param/> 은 java.sql.PreparedStatement.setString() 의 역할을 한다.

<sql:dateParam value="value" type="[timestamp|time|date]"/>
<sql:param value="value"/>

4.4 <sql:update/>

java.sql.Statement.executeUpdate() 메소드에 해당.
형식과 동작은 <sql:query/>태그와 동일.

<sql:update sql="sqlUpdate"
[dataSource="dataSource"]
[var="varName"] [scope="{page|request|session|application}"]/>
<html>
<body>
<sql:setDataSource var="dataSrc"
     url="jdbc:oracle:thin:@localhost:1521:ORCL" driver="oracle.jdbc.OracleDriver"
    user="scott" password="tiger"/>

<sql:transaction dataSource="${dataSrc}">
    <sql:update sql="insert into dept(deptno, dname, loc) values(?,?,?)">
        <sql:param value="50"/>
        <sql:param value="DEVS"/>
        <sql:param value="SEOUL"/>
    </sql:update>

    <sql:update sql="update dept set LOC=? where deptno=?">
        <sql:param value="BUSAN"/>
        <sql:param value="50"/>
    </sql:update>
</sql:transaction>
</body>
</html>

4.5 <sql:transaction/>

트랜잭션 구현.
(트랜잭션은 하나의 작업 그룹으로서 성공 또는 실패 시에 데이타베이스 연산 결과를 보호하는데 사용)

<sql:transaction [dataSource="dataSource"]
[isolation=isolationLevel]>
<sql:query> 과 <sql:update> 문들
</sql:transaction>

isolationLevel ::= "read_committed"| "read_uncommitted"| "repeatable_read"| "serializable"

문서에 대하여

Posted by 1010