JSTL SQLライブラリ - <sql:query>タグ

データベースに対して問合せを行います。

構文

構文1: ボディ・コンテンツなし

<sql:query sql="sqlQuery"
   var=varName [scope=”{page|request|session|application}”]
      [dataSource=”dataSource ”]
      [maxRows="maxRows"]
      [startRow="startRow "]/>

構文2: ボディに問合せ属性を指定

<sql:query sql="sqlQuery"
   var=varName [scope=”{page|request|session|application}”]
      [dataSource=”dataSource ”]
      [maxRows="maxRows"]
      [startRow="startRow "]/>
<sql:param> actions
</sql:query>

構文3: ボディに問合せとオプションの問合せパラメータを指定

<sql:query var="varName"
    [scope=”{page|request|session|application}”]
      [dataSource=”dataSource ”]
      [maxRows="maxRows"]
      [startRow="startRow "]/>
query
optional <sql:param> actions
</sql:query>

ボディ・コンテンツ

JSP。JSPコンテナがボディ・コンテンツを処理した後、アクションがボディ・コンテンツを切り捨ててさらに処理します。

属性

sql
SQL問合せ文。
dataSource
問合せ対象のデータベースに関連付けられているデータソース。String値は、JNDIリソースへの相対パス、またはDriverManagerクラスのパラメータを表します。
maxRows
問合せ結果に含まれる最大行数。指定しない場合、または-1に設定した場合、最大行数は制限されません。
startRow
返されるResultオブジェクトには、指定したインデックス以降の行が含まれます。元の問合せ結果セットでは、先頭行のインデックスは0です。この属性を指定しない場合、インデックス0の先頭行以降の行が含まれます。
var
問合せ結果を格納するエクスポート・スコープ変数の名前。スコープ変数の型はjavax.servlet.jsp.jstl.sqlです。結果は、http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.htmlにある『JavaServer Pages Standard Tag Library 1.0 Specification』の10.9項を参照してください。
scope
varのスコープ。

制約

NULLおよびエラーの処理

説明

<sql:query>アクションはデータベースに対して問合せを行い、var属性およびscope属性で指定したスコープ変数に、データ行を含む単一の結果セットを格納して返します。

問合せで結果が生成されなかった場合、空のResultオブジェクト(サイズはゼロ)が返されます。

SQL問合せ文は、sql属性で、またはアクションのボディ・コンテンツに指定できます。

問合せ文には、JDBC PreparedStatementパラメータを示すパラメータ・マーカー(?)を含めることができます。パラメータ・マーカーの値は、<sql:param>などのネストされたパラメータ・アクション(10.7項を参照)によって指定する必要があります。<sql:query>アクションはSQLExecutionTagインタフェースを実装し(http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.htmlにある『JavaServer Pages Standard Tag Library 1.0 Specification』の10.10項を参照)、カスタム・パラメータ・アクションによるパラメータ値の指定を可能にします。

maxRowsとstartRow

問合せ結果に含まれる最大行数は、特定の<sql:query>アクションのmaxRows属性、または構成設定javax.servlet.jsp.jstl.sql.maxRowsで指定することができます。http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.htmlにある『JavaServer Pages Standard Tag Library 1.0 Specification』の2.8項および10.12項を参照してください。maxRows属性は構成設定より優先されます。値が-1の場合、最大行数は制限されません。

startRow属性を使用して、返されるResultオブジェクトの先頭行のインデックスを指定できます。たとえば、10という値を指定した場合、返されるResultオブジェクトはインデックス10の行から始まります(元の問合せ結果セットの0から9の行はスキップされます)。元の問合せ結果セットの残りの行はすべて含まれます。

startRowmaxRowsの両方を指定した場合、最大でstartRow + maxRowsの数の行がデータベースから取得されます。startRowより前の行はすべて破棄され、残りの行(startRowからstartRow + maxRowsまで)が結果に含まれます。

startRowを使用する場合、問合せにorder by句を指定しないかぎり、行が返される順序はRDBMS実装によって異なりますので注意してください。

maxRowsstartRowを使用すれば、リソース集中型の問合せを防止し、大規模な結果セットの先頭行に効率的にアクセスすることができます。また、startRowを前のページよりmaxRowsだけ増やすことで、大規模な問合せ結果を簡単にページごとに表示できます。

接続の取得および解放

<sql:query><sql:transaction>アクション内にネストされている場合、Connectionオブジェクトは、データベースへのアクセスを管理している親の<sql:transaction>から取得されます。

<sql:query>がネストされていない場合、データベースへのアクセスは10.2項に記載されたアルゴリズムに従って実行されます。Connectionオブジェクトは、<sql:transaction>アクションが完了する前に取得および解放されます。

注意: JSTL 1.1では、Java Servlet 2.4およびJavaServer Pages 2.0の仕様をサポートするJSPコンテナが必要です。JSTL 1.0仕様の実装には、Java Servlet 2.3およびJavaServer Pages 1.2の仕様をサポートするJSPコンテナが必要です。

JSTLタグの状況依存ヘルプを提供するため、JSTLタグ・ライブラリのドキュメントがApache Software Foundation(http://www.apache.org/)で作成され、JDeveloperに含まれています。また、JSTLタグおよび属性の説明を含む『JavaServer Pages Standard Tag Library 1.0 and 1.1 Specifications』を次のWebサイトからダウンロードできます。

http://www.jcp.org/aboutJava/communityprocess/final/jsr052/index2.html

JSTLの詳細は、次の外部リファレンスを参照してください。

『Java Sun JSTL Resources』ページ:
http://java.sun.com/products/jsp/jstl/

 

JDeveloperのJSTLタグ・ライブラリについて
リファレンス: JavaServer Pages標準タグ・ライブラリ(JSTL)