[JSP] JSTL - sql 태그 (SQL Tags)
앎/web 2014. 3. 25. 16:12 |JSTL SQL Tags
JSTL sql 태그는 이름 그대로 sql 관련 작업을 처리하기 위한 태그 라이브러리이다.
JSP의 시작 부분에 taglib 정의를 추가한다.
1 | <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %> |
<sql:setDataSource> Tag
DataSource를 지정한다.
<sql:setDataSource {dataSource="데이터소스" | url="jdbc Url"}
driver="드라이버 클래스 명"
user="DB 사용자 계정"
password="DB 사용자 패스워드"
var="변수에 DataSource 스펙 저장"
scope="{page | request | session | application"} />
Name |
Required |
Request-time | Type | Desc |
var |
false | false | java.lang.String | 변수에 DataSource 스펙 저장 |
scope |
false |
false |
java.lang.String | 변수 공유 범위 |
dataSource |
false |
true |
java.lang.String | 컨텍스트에 JNDI 설정 시 Resource Name |
driver |
false |
true |
java.lang.String | 드라이버 클래스 명 |
url |
false |
true |
java.lang.String | JDBC URL |
user |
false |
true |
java.lang.String | DB 사용자 계정 |
password |
false |
true |
java.lang.String | DB 사용자 패스워드 |
MySQL의 경우로 예를 들어 보자.
MySQL Community Server 설치 시 기본적으로 만들어지는 world 테이블을 이용한다.
사용자 계정은 root를 사용하고 패스워드는 12345678 이다.
<sql:setDataSource url="jdbc:mysql://localhost:3306/world" driver="com.mysql.jdbc.Driver" user="root" password="12345678" var="ds" scope="session" />
이렇게 생성한 DataSource인 ds는 <sql:query> 태그에서 사용할 수 있다.
DataSource를 얻는 다른 방법으로 DBCP를 사용할 수 있다.
※ 참고: [Servlet] DBCP(Database Connection Pool)를 사용한 DB 연결
프로젝트/META-INF/Context.xml에 다음과 같이 연결 정보를 작성한다.
<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/myconn" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost:3306/world?AutoReconnect=true" username="root" password="12345678" maxActive="100" maxIdle="30" maxWait="60" removeAbandoned="true" removeAbandonedTiemout="60" /> </Context>
DBCP를 사용할 때는 다음과 같이 dataSource 속성에 리소스 이름을 쓰면 된다.
<sql:setDataSource dataSource="jdbc/myconn" var="ds" scope="session" />
<sql:param>, <sql:dateParam> Tag
날짜 형식 파라미터에는 <sql:dataParam>을 문자열 형식 파라미터에는 <sql:param> 을 사용한다.
<sql:param value="값" />
Name | Required | Request-time | Type | Desc |
value | false | true | java.lang.String | 파라미터 값 |
<sql:dateParam value="값" type="{timestamp | time | date}" />
Name | Required | Request-time | Type | Desc |
value | true | true | java.lang.String | DATE, TIME, TIMESTAMP 값 |
type | false | true | java.lang.String | data, time, timestamp 중 하나를 쓴다. |
<sql:query> Tag
sql 태그의 속성 또는 body에 정의된 쿼리 문장을 실행한다.
<sql:qeury var="varName"
dataSource="dataSource"
sql="sqlQuery"
scope="{page | request | session | application}"
maxRows="maxRows"
startRow="startRow" />
Name |
Required |
Request-time |
Type |
Desc |
var |
true |
false |
java.lang.String |
쿼리의 결과를 저장. |
dataSource |
false |
true |
java.lang.String |
JNDI Resource Name or DriverManager를 위한 파라미터 |
sql |
false |
true |
java.lang.String |
쿼리 문장 |
scope |
false |
false |
java.lang.String |
변수 공유 범위 |
maxRows |
false |
true |
java.lang.String |
쿼리 결과에 포함될 최대 행의 수 |
startRow |
false |
true |
java.lang.String |
쿼리 결과에 포함될 시작 행 번호. 0부터 시작. |
다음은 모두 동일한 결과를 보인다.
<sql:query sql="select * from country where Continent='Asia' and Region='Middle East'" var="rs" dataSource="${ds}" />
<c:set var="param1" value="Asia" /> <c:set var="param2" value="Middle East" /> <sql:query sql="select * from country where Continent=? and Region=?" var="rs" dataSource="${ds}"> <sql:param value="${param1}" /> <sql:param value="${param2}" /> </sql:query>
<c:set var="param1" value="Asia" /> <c:set var="param2" value="Middle East" /> <sql:query var="rs" dataSource="${ds}"> select * from country where Continent=? and Region=? <sql:param value="${param1}" /> <sql:param value="${param2}" /> </sql:query>
<sql:update> Tag
INSERT, UPDATE, DELETE 과 같은 데이터를 반환하지 않는 SQL 문장을 실행시키는데 사용한다.
<sql:update var="varName"
dataSource="dataSource"
sql="sqlQuery"
scope="{page | request | session | application}" />
Name | Required | Request-time | Type | Desc |
var | true | false | java.lang.String | 쿼리에 영향을 받은 rows 카운트 |
dataSource | false | true | java.lang.String | JNDI Resource Name or DriverManager를 위한 파라미터 |
sql | false | true | java.lang.String | 쿼리 문장 |
scope | false | false | java.lang.String | 변수 공유 범위 |
<sql:param> 태그 과 함께 사용하는 방법은 <sql:query> 태그와 동일하다.
<sql:transaction> Tag
transaction을 만들 때 사용한다. 한 transaction에 여러 개의 query, update를 사용할 수 있다.
<sql:transaction dataSource="dataSource" isolation="isolationLevel">
<sql:query>
<sql:update>
....
</sql:transaction>
Name |
Required |
Request-time |
Type |
Desc |
dataSource |
false |
true |
java.lang.String |
JNDI Resource Name or DriverManager를 위한 파라미터 |
isolation |
false |
true |
java.lang.String |
READ_COMMITED, READ_UNCOMMITED, REPEATABLE_READ, SERIALIZABLE 중 한 값을 가진다. 기본 값으로 dataSource에 설정된 값이 사용된다. |
예제)
'앎 > web' 카테고리의 다른 글
[JSP] JSTL - fmt 태그 (Formatting Tags) (0) | 2014.03.25 |
---|---|
[JSP] JSTL - c 태그 (Core Tags) (0) | 2014.03.25 |
[JSP] JSTL (JavaServer Pages Standard Tag Library) (0) | 2014.03.25 |
[Applet] '보안 설정으로 차단된 응용 프로그램' 오류 발생 시 처리 (0) | 2014.03.19 |
[JSP] 액션 (JSP Actions) - plugin, params, param (0) | 2014.03.18 |