Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > オープンソース > Taglibs −6.Standard Taglibs:SQLタグライブラリ
更新日:2012/3/12
Taglibs−6.Standard Taglibs:SQLタグライブラリ
ここでは、Standard Taglibsで定義されている、SQLタグライブラリについて解説します。SQLタグライブラリでは、DBとの接続、DBへのデータ検索、挿入、更新、削除を行うタグが定義されています。

実行環境
・WindowsXP Home Edition
・J2SDK 1.4.2_04
・Tomcat 5.0.18
・Standard Taglib 1.1.0
SQLタグライブラリの一覧

SQLタグライブラリで定義されているタグを以下に記載します。

タグ
内容
DBへの接続情報を持つ、DataSourceオブジェクトを作成する。
SQL文を実行し、DB内のデータを検索する。
挿入、更新、削除、テーブル作成など検索以外のSQL文を実行する。<sql:update>タグ単位でSQL文はコミットされる。
<sql:transaction>タグ内に記載される<sql:query>タグ、<sql:update>タグを1トランザクションとして管理し、いずれかのタグの処理が失敗した場合、<sql:transaction>タグ内のすべての処理がロールバックされる。
<sql:query>タグ、<sql:update>タグのサブタグとして使用し、SQL文の?を置き換える値を指定する。値はテーブル内のDATE型、TIME型、TIMESTAMP型のカラムに適用される。
<sql:query>タグ、<sql:update>タグのサブタグとして使用し、SQL文の?を置き換える値を指定する。?が複数ある場合は<sql:param>タグの設定順に適用される。
SQLタグライブラリの使用例
<sql:setDataSource>

構文1
<sql:setDataSource {dataSource="DB接続設定" | url="JDBCドライバへのURL"
             [driver="JDBCドライバのクラス"]
             [user="ユーザID"]
             [password="パスワード"]}
             [var="変数名"]
             [scope=”{page|request|session|application}”]/>

属性
属性
内容
必須
var
DBへの接続情報として作成されたDataSourceオブジェクトを代入する変数。他のタグでDataSourceオブジェクトを指定する際に使用する。
×
scope
DateSourceオブジェクトが代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。
×
dataSource
あらかじめDBへの接続設定が行われている場合に、その接続設定情報を指定する。接続設定はDataSourceオブジェクト、JNDIリソース、JDBCパラメータのいずれかが設定できる。
×
driver
JDBCドライバのクラスを指定する。
×
url
JDBCドライバに接続するためのJDBC準拠のURLを指定する。
×
user
データベースに接続するためのユーザIDを指定する。
×
password
データベースに接続するためのパスワードを指定する。
×
サンプルコード:DataSourceオブジェクトを作成する際の典型的な設定例です。
<sql:setDataSource var="example" driver="RmiJdbc.RJDriver"
url="jdbc:rmi://localhost:1099/jdbc:cloudscape:CloudscapeDB;create=true"/>
<sql:query>

構文1
<sql:query sql="SQL文"
       var="変数名"
       [scope=”{page|request|session|application}”]
       [dataSource=”DB接続設定”]
       [maxRows="最大返信行数"]
       [startRow="返信開始行"]/>

構文2
<sql:query sql="SQL文"
       var="変数名"
       [scope=”{page|request|session|application}”]
       [dataSource=”DB接続設定”]
       [maxRows="最大返信行数"]
       [startRow="返信開始行"]>
  <sql:param>SQL文のパラメータ
</sql:query>

構文3
<sql:query var="変数名"
       [scope=”{page|request|session|application}”]
       [dataSource=”DB接続設定”]
       [maxRows="最大返信行数"]
       [startRow="返信開始行"]>
  SQL文
  <sql:param>SQL文のパラメータ
</sql:query>

属性
属性
内容
必須
var
SQL文の実行結果が代入される変数を指定する。
scope
SQL文の実行結果が代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。
×
sql
実行するSQL文を指定する。
×
dataSource
あらかじめDBへの接続設定が行われている場合に、その接続設定情報を指定する。接続設定はDataSourceオブジェクト、JNDIリソース、JDBCパラメータのいずれかが設定できる。
×
startRow
実行結果の何行目から返すかを指定する。
×
maxRows
実行結果が返す最大行数を指定する。デフォルトの設定ではすべての実行結果が返される。
×
サンプルコード:SQL文(SELECT * FROM mytable)の実行結果を変数deejaysに代入しています。
<sql:query var="deejays">
  SELECT * FROM mytable
</sql:query>
サンプルコード2:DataSourceオブジェクトを指定して、SQL文を実行しています。実行結果は、変数rsSelectに設定されます。実行結果の1行目(firstName)を取得する場合は、rsSelect.rows[0].firstNameと指定します。
<sql:query var="rsSelect" dataSource="${example}"
           sql="select firstName, address from member where id = 'aiueo';" />
<c:set var="firstName" value="${rsSelect.rows[0].firstName}" />

サンプルコード3:SQLの実行結果の数を取得するサンプルです。count(*)を別名(countNum)で指定しているのがポイントです。別名の実行結果を、rsCount.rows[0].countNumで取得しています。

<sql:query var="rsCount" dataSource="${example}"
       sql="select count(*) countNum from member where address = 'Tokyo';" />
<c:set var="countNum" value="${rsCount.rows[0].countNum}" />

サンプルコード4:SQLの実行結果を<c:forEach>タグを使用して表示するサンプルです。items属性で指定された値を順に表示しています。

<sql:query var="rsSelect" dataSource="${example}"
           sql="select firstName, address from member where id = 'aiueo';" />
<c:forEach var="rowSelect" items="${rsSelect.rows}">
  ${rowSelect.firstName}${rowSelect.address}<br>
</c:forEach>
<sql:update>

構文1
<sql:update sql="SQL文"
        [dataSource=”DB接続設定”]
        [var="変数名"]
        [scope=”{page|request|session|application}”]/>

構文2
<sql:update sql="SQL文"
        [dataSource=”DB接続設定”]
        [var="変数名"]
        [scope=”{page|request|session|application}”]>
  <sql:param>SQL文のパラメータ
</sql:update>

構文3
<sql:update [dataSource=”DB接続設定”]
        [var="変数名"]
        [scope=”{page|request|session|application}”]>
  SQL文
  <sql:param>SQL文のパラメータ
</sql:update>

属性
属性
内容
必須
var
SQL文の実行結果が代入される変数を指定する。変数の型はInteger型になる。
×
scope
SQL文の実行結果が代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。
×
sql
実行するSQL文を指定する。
×
dataSource
あらかじめDBへの接続設定が行われている場合に、その接続設定情報を指定する。接続設定はDataSourceオブジェクト、JNDIリソース、JDBCパラメータのいずれかが設定できる。
×
サンプルコード:SQL文(INSERT INTO mytable VALUES (1,'Paul Oakenfold'))をしています。
<sql:update var="updateCount">
  INSERT INTO mytable VALUES (1,'Paul Oakenfold')
</sql:update>
<sql:transaction>

構文1
<sql:transaction [dataSource=”DB接続設定”] [isolation=isolationレベル]>
   <sql:query>タグ、<sql:update>タグ
</sql:transaction>

属性
属性
内容
必須
dataSource
あらかじめDBへの接続設定が行われている場合に、その接続設定情報を指定する。接続設定はDataSourceオブジェクト、JNDIリソース、JDBCパラメータのいずれかが設定できる。
×
isolation
isolationレベルを指定する。isolationレベルは「read_committed」、「read_uncommitted」、「repeatable_read」、「serializable」のいずれかが指定できる。デフォルトではDB接続設定に指定されているisolationが適用される。
×
サンプルコード:<sql:transaction>タグ内で実行される<sql:update>タグが失敗した場合はすべての<sql:upsate>タグの実行結果がロールバックされます。
<sql:transaction dataSource="${example}">
  <sql:update var="updateCount">
    INSERT INTO mytable VALUES (1,'Paul Oakenfold')
  </sql:update>
  <sql:update var="updateCount">
    INSERT INTO mytable VALUES (2,'Timo Maas')
  </sql:update>
  <sql:update var="updateCount">
    INSERT INTO mytable VALUES (3,'Paul van Dyk')
  </sql:update>
</sql:transaction>
<sql:dateParam>

構文1
<sql:dateParam value=”パラメータ値” [type=”{timestamp|time|date}”]/>

属性
属性
内容
必須
value
テーブル内のDATE型、TIME型、TIMESTAMP型のカラムに対して、SQL文の?を置き換える値を指定する。
type
value属性で指定された値の型を指定する。date、time、timestampのいずれかを指定する。
×
<sql:param>

構文1
<sql:param value=”パラメータ値”/>

構文2
<sql:param>
  パラメータ値
</sql:param>

属性
属性
内容
必須
value
SQL文の?を置き換える値を指定する。
×
サンプルコード: SQL文内の?を該当する<sql:param>タグの値に置き換えて実行しています。
<sql:update var="updateCount">
  INSERT INTO mytable VALUES (?,?)
  <sql:param value="3"/>
  <sql:param value="${newName}"/>
</sql:update>



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道