<sql:setDataSource>
xmlns:sql="http://java.sun.com/jsp/jstl/sql"
SYNOPSIS
説 明
変数にデータソースを設定します。アプリケーションサーバが提供する (そして web.xml でインポートした) データソースが使用できるほか、
JDBC URL とユーザ名/パスワードを直接指定する方法で擬似的なデータソースを使用することが出来ます
(JNDI に新しいデータソースが作成されるわけではありません)。
ここで設定した値は <sql:transaction> などの SQL JSTL 機能で使用することができますが、それらのデータソース指定に直接データソース名を記述することも出来ます。
属 性
optional
このタグで定義したデータソースを格納する変数です。この変数には文字列としてのデータソース名またはデータソースのインスタンスそのものが格納されます。
アプリケーションが複数のデータソースを使い分ける必要がない場合、この属性を省略することができます。この時、データソースは設定変数
javax.servlet.jsp.jstl.sql.dataSource に格納されます。
optional
var 属性で指定した変数を格納するスコープです。
page, request, session, application
のいずれかを指定できます。
使用例
データソースを指定してデータベースから現在時刻を取得します。「現在時刻: 2007/12/24 19:25:58」のような出力が得られます。
これは
データソースを使用しないで JDBC URL で直接データベースに接続することが出来ます。この使用方法はコネクションプールを使用しないため効率は良くありませんが、例えば簡単な動作確認を行いたいだけの場合などは JDBC URL で直接接続する方が手軽な場合があります。
コンテキストパラメータ (
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>
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>