JSTL リファレンス

<sql:setDataSource>
xmlns:sql="http://java.sun.com/jsp/jstl/sql"

SYNOPSIS

<sql:setDataSource
var="変数名"
scope="page|request|session|application"
dataSource†1="データソース名"
driver="クラス完全限定名"
url†1="JDBC URL"
user="ユーザ名"
password="パスワード"
/>

説 明

変数にデータソースを設定します。 アプリケーションサーバが提供する (そして web.xml でインポートした) データソースが使用できるほか、 JDBC URL とユーザ名/パスワードを直接指定する方法で擬似的なデータソースを使用することが出来ます (JNDI に新しいデータソースが作成されるわけではありません)。

ここで設定した値は <sql:transaction> などの SQL JSTL 機能 で使用することができますが、それらのデータソース指定に直接データソース 名を記述することも出来ます。

参照: <sql:transaction> 

属 性

var="変数名"
optional

このタグで定義したデータソースを格納する変数です。 この変数には文字列としてのデータソース名またはデータソースのインスタンス そのものが格納されます。

アプリケーションが複数のデータソースを使い分ける必要がない場合、 この属性を省略することができます。この時、データソースは設定変数 javax.servlet.jsp.jstl.sql.dataSource に格納されます。

scope="page|request|session|application"
optional
var 属性で指定した変数を格納するスコープです。 page, request, session, application のいずれかを指定できます。
dataSource="データソース名"
selective required 1

jdbc/XXX 形式のデータソース名です。 url 属性とどちらかを指定する必要があります。

driver="クラス完全限定名"
optional
url 属性で直接指定する場合に使用する JDBC ドライバのクラス名です。
url="JDBC URL"
selective required 1
JDBC URL を使用して直接データベースに接続する場合の URL です。
user="ユーザ名"
optional
直接接続に使用するユーザ名。
password="パスワード"
optional
直接接続に使用するパスワード。

使用例

データソースを指定してデータベースから現在時刻を取得します。 「現在時刻: 2007/12/24 19:25:58」 のような出力が得られます。
JSP
<sql:setDataSource var="ds" dataSource="jdbc/SOMEDS" />
<sql:transaction dataSource="${ds}">
<sql:query var="rs" sql="select current_timestamp as cur" />
<c:forEach var="r" items="${rs.rows}">
    現在時刻: <fmt:formatDate value="${r['cur']}" type="both" />
</c:forEach>
</sql:transaction>
これは <sql:transaction> タグの dataSource 属性に直接 データソース名を指定していも同じ結果が得られます。
JSP
<sql:transaction dataSource="jdbc/SOMEDS">
<sql:query var="rs" sql="select current_timestamp as cur" />
<c:forEach var="r" items="${rs.rows}">
    現在時刻: <fmt:formatDate value="${r['cur']}" type="both" />
</c:forEach>
</sql:transaction>
データソースを使用しないで JDBC URL で直接データベースに接続する ことが出来ます。この使用方法はコネクションプールを使用しないため 効率は良くありませんが、例えば簡単な動作確認を行いたいだけの 場合などは JDBC URL で直接接続する方が手軽な場合があります。
JSP
<sql:setDataSource var="ds" url="jdbc:postgresql://server/somedb"
    user="postgres" password="postgres"
    driver="org.postgresql.Driver" />
<sql:transaction dataSource="${ds}">
<sql:query var="rs" sql="select current_timestamp as cur" />
<c:forEach var="r" items="${rs.rows}">
    現在時刻: <fmt:formatDate value="${r['cur']}" type="both" />
</c:forEach>
</sql:transaction>
コンテキストパラメータ (web.xml) の myDataSource に定義されているデータソース名を使用して データソースを指定してデータベースから現在時刻を取得します。 「現在時刻: 2007/12/24 19:25:58」 のような出力が得られます。
JSP
<sql:setDataSource var="ds" dataSource="${initParam['myDataSource']}" />
<sql:transaction dataSource="${ds}">
<sql:query var="rs" sql="select current_timestamp as cur" />
<c:forEach var="r" items="${rs.rows}">
    現在時刻: <fmt:formatDate value="${r['cur']}" type="both" />
</c:forEach>
</sql:transaction>
CVS 2008/03/09