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