반응형
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"
문서에 대하여
- 문서참고 : 이 문서는 okjsp 운영자 허광남씨가 작성한 JSP Standard Tag Library (JSTL)를 참고하여 작성하였습니다.
- 최초작성자 : 고유정
- 최초작성일 : 2007년 10월 6일
- 이 문서는 오라클클럽 자바 웹개발자 스터디 모임에서 작성하였습니다.