Oracle Application Server Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス 10g 部品番号: A97678-01 |
|
この章では、サーブレットおよびJSPページからデータベースへのアクセス用にOC4Jで提供されるJavaBeansおよびタグについて説明します。
この章の内容は、次のとおりです。
OC4J製品には、データベースへのアクセスに使用できるように一連のJavaBeansが組み込まれています。この項では、Beanについて説明します。この項の内容は、次のとおりです。
注意: ここで説明するJavaBeansは、「データ・アクセス用SQLタグ」で説明するタグで使用されます。通常、これらのBeanとタグは、適切なJDBCドライバ・クラスがあればOracle以外のデータベースで使用できます。ただし、後述する多数の機能はOracle固有のものです。 |
OC4Jには、データベース・アクセス用のカスタムJavaBeansのセットが用意されています。oracle.jsp.dbutil
パッケージには次のBeanが含まれています。
ConnBean
は、データベース接続をオープンします。このBeanは、データソースと接続プーリングもサポートしています。関連情報は、「データソースおよびプールされた接続に対するデータ・アクセスのサポート」を参照してください。
ConnCacheBean
は、データベース接続にOracle JDBC接続キャッシュ実装を使用します。これにはJDBC 2.0が必須です。
DBBean
はデータベース問合せを実行します。独自の接続メカニズムもありますが、データソースをサポートしていません。
CursorBean
は問合せ、UPDATE
文、INSERT
文、DELETE
文およびストアド・プロシージャ・コールに対する一般的なDMLサポートを提供します。
この項は、Oracle JDBCに関する実務上の知識があることを前提としています。必要に応じて、Oracle JDBC開発者ガイドおよびリファレンスを参照してください。
データ・アクセスJavaBeansを使用するには、ファイルojsputil.jar
がインストール済でCLASSPATHに指定されていることを確認します。このファイルはOC4Jインストールとともに提供されます。XML関連のメソッドと機能には、ファイルxsu12.jar
(JDK 1.2.xの場合)またはxsu111.jar
(JDK 1.1.xの場合)も必要になりますが、どちらもOracle Application Serverとともに提供されます。
また、適切なJDBCドライバ・クラス(OracleデータベースおよびJDK 1.2以上の場合はclasses12.zip
など)も、インストール済でCLASSPATHに指定されている必要があります。
データ・アクセスJavaBeansとデータ・アクセス・タグ・ライブラリは、データソースを使用した接続プロパティの指定をサポートしています。接続プーリングのサポートも、この方法で実装されています。このメカニズムは、Oracle接続オブジェクトとOC4J接続オブジェクトの両方をサポートしています。
JSPページでデータソースを使用するには、データソース、JNDI名および接続プロパティとプーリング・プロパティを定義する必要があります。OC4Jでは、この定義をdata-sources.xml
ファイルの<data-source>
要素で行います。次に例を示します。
<data-source class="oracle.jdbc.pool.OracleDataSource" name="jdbc/ejbpool/OracleDS" location="jdbc/ConnectionDS" ejb-location="jdbc/ejbpool/OracleDS" url="jdbc:oracle:thin:@myhost:1521:orcl" username="scott" password="tiger" min-connections="3" max-connections="50" wait-timeout="10" inactivity-timeout="30" />
データソースの詳細は、Oracle Containers for J2EEサービス・ガイド 10gを参照してください。
この項では、データ・アクセスJavaBeans(ConnBean
、ConnCacheBean
、 DBBean
およびCursorBean
)の属性とメソッドについて説明し、データソースの使用例を示します。
oracle.jsp.dbutil.ConnBean
を使用して、単純データベース接続(接続プーリングやキャッシュを使用しない接続)を確立します。
ConnBean
のプロパティを次に示します。データソースを使用する場合、user
、password
およびURL
の各プロパティは不要です。
dataSource
(データソース・ロケーションのJNDI名)
このプロパティは、データソースをサポートしている環境にのみ有効です。OC4Jにおけるデータソースの設定方法の詳細は、「データソースおよびプールされた接続に対するデータ・アクセスのサポート」を参照してください。
user
(データベース・スキーマ用のユーザーID)
password
(ユーザー・パスワード)
URL
(データベース接続文字列)
stmtCacheSize
(Oracle JDBCの文キャッシュのキャッシュ・サイズ)
stmtCacheSize
を設定すると、Oracle JDBCの文キャッシュが有効化されます。
executeBatch
(Oracle JDBCのバッチ更新のバッチ・サイズ)
executeBatch
を設定すると、Oracle JDBCのバッチ更新が有効化されます。
preFetch
(Oracle JDBCの行プリフェッチでプリフェッチする文の数)
preFetch
を設定すると、Oracle JDBCの行プリフェッチが有効化されます。
commitOnClose
(接続のクローズ時にcommit
を実行するかどうかを示すtrue
またはfalse
)
このプロパティの値は、接続のクローズ時に自動commit
を実行するかどうかを示します。true
に設定するとcommit
が実行され、false
に設定するとrollback
が実行されます。以前のリリースでは常に自動commit
が実行されましたが、Oracle9iASリリース2では、デフォルトで自動rollback
が実行されます。commitOnClose
プロパティは、移行を容易にするための下位互換性を考慮したものです。
アプリケーションのweb.xml
ファイルでアプリケーション単位のcommit-on-close
を設定できますが、その設定によりConnBean
プロパティの設定が自動的に決定されるわけではないことに注意してください。JSPページでdbOpen
タグのかわりにConnBean
を使用する場合は、commit-on-close
コンテキスト・パラメータの値を取得し、ConnBean
インスタンスでcommitOnClose
値として明示的に設定する必要があります。参考のために、commit-on-close
コンテキスト・パラメータを設定するweb.xml
サンプル・エントリを次に示します。
<context-param> <param-name>commit-on-close</param-name> <param-value>true</param-value> </context-param>
ConnBean
は、前述したプロパティについて次のsetterメソッドとgetterメソッドを提供します。
void setDataSource(String)
String getDataSource()
void setUser(String)
String getUser()
void setPassword(String)
String getPassword()
void setURL(String)
String getURL()
void setStmtCacheSize(int)
int getStmtCacheSize()
void setExecuteBatch(int)
int getExecuteBatch()
void setPreFetch(int)
int getPreFetch()
void setCommitOnClose(String)
String getCommitOnClose()
次のメソッドを使用して、接続をオープンまたはクローズしたり、接続ステータスを検証します。
void connect()
ConnBean
プロパティ設定を使用してデータベース接続を確立します。
void close()
接続とオープン・カーソル(存在する場合)をクローズします。
boolean isConnectionClosed()
: 接続がクローズされているかどうかを判別します。
次のメソッドを使用して、カーソルをオープンし、CursorBean
オブジェクトを戻します。
または
CursorBean
機能の詳細は、「DMLおよびストアド・プロシージャ用のCursorBean」を参照してください。
データベース接続にJDBC 2.0接続プーリングによるOracle JDBC接続キャッシュ・メカニズムを使用するには、oracle.jsp.dbutil.ConnCacheBean
を使用します。接続キャッシュの詳細は、Oracle JDBC開発者ガイドおよびリファレンスを参照してください。
注意:
|
ConnCacheBean
のプロパティは、次のとおりです。
user
(データベース・スキーマ用のユーザーID)
password
(ユーザー・パスワード)
URL
(データベース接続文字列)
maxLimit
(このキャッシュの最大許容接続数)
minLimit
(このキャッシュに存在する最小接続数)
使用接続数がこれよりも少数の場合は、キャッシュのアイドル・プールにも接続が存在することになります。
stmtCacheSize
(Oracle JDBCの文キャッシュのキャッシュ・サイズ)
stmtCacheSize
を設定すると、Oracle JDBCの文キャッシュ機能が有効化されます。Oracle JDBCの文キャッシュ機能と制限事項の詳細は、Oracle JDBC開発者ガイドおよびリファレンスを参照してください。
cacheScheme
(次のいずれかのint
定数で示されるキャッシュのタイプ)
ConnCacheBean
クラスは、Oracle JDBCのOracleConnectionCacheImpl
クラスに定義されているメソッドをサポートしています。これには、対応するプロパティの次のgetterメソッドとsetterメソッドが含まれます。
void setUser(String)
String getUser()
void setPassword(String)
String getPassword()
void setURL(String)
String getURL()
void setMaxLimit(int)
int getMaxLimit()
void setMinLimit(int)
int getMinLimit()
void setStmtCacheSize(int)
int getStmtCacheSize()
void setCacheScheme(int)
ConnCacheBean.DYNAMIC_SCHEME
、 ConnCacheBean.FIXED_WAIT_SCHEME
または ConnCacheBean.FIXED_RETURN_NULL_SCHEME
を指定します。
int getCacheScheme()
ConnCacheBean.DYNAMIC_SCHEME
、 ConnCacheBean.FIXED_WAIT_SCHEME
または ConnCacheBean.FIXED_RETURN_NULL_SCHEME
を戻します。
ConnCacheBean
クラスは、 oracle.jdbc.pool.OracleDataSource
クラスからもプロパティ、関連getterメソッドおよび関連setterメソッドを継承します。これにより、プロパティdatabaseName
、 dataSourceName
、description
、networkProtocol
、 portNumber
、serverName
およびdriverType
のgetterメソッドとsetterメソッドが提供されます。これらのプロパティおよびgetterメソッドとsetterメソッドの詳細は、Oracle JDBC開発者ガイドおよびリファレンスを参照してください。
注意:
JSPページで使用するJavaBeanの場合と同様に、setterメソッドを直接使用するかわりに、すべての |
次のメソッドを使用して、接続をオープンおよびクローズします。
Connection getConnection()
ConnCacheBean
プロパティ設定を使用して、接続キャッシュから接続を取得します。
void close()
すべての接続とオープン・カーソル(存在する場合)をクローズします。
ConnCacheBean
クラスはOracle JDBCのバッチ更新と行プリフェッチを直接はサポートしていませんが、これらの機能はgetConnection()
メソッドから取得するConnection
オブジェクトのsetDefaultExecuteBatch(int)
メソッドとsetDefaultRowPrefetch(int)
メソッドをコールすることで有効化できます。また、Connection
オブジェクトから作成するJDBC文オブジェクトのsetExecuteBatch(int)
メソッドとsetRowPrefetch(int)
メソッドを使用する方法もあります(バッチ更新はプリコンパイルされた文でのみサポートされています)。これらの機能の詳細は、Oracle JDBC開発者ガイドおよびリファレンスを参照してください。
注意:
|
問合せのみを実行するにはoracle.jsp.dbutil.DBBean
を使用します。
注意:
|
DBBean
のプロパティは、次のとおりです。
DBBean
は、前述したプロパティについて次のsetterメソッドとgetterメソッドを提供します。
void setUser(String)
String getUser()
void setPassword(String)
String getPassword()
void setURL(String)
String getURL()
次のメソッドを使用して、接続をオープンおよびクローズします。
次のいずれかのメソッドを使用して問合せを実行します。
String getResultAsHTMLTable(String)
SELECT
文を含む文字列を入力します。このメソッドは、結果セットをHTML表として出力するために必要なHTMLコマンドを文字列とともに戻します。表列のヘッダーにはSQLの列名(または別名)が使用されます。
String getResultAsXMLString(String)
SELECT
文を含む文字列を入力します。このメソッドは、XMLタグにSQL名(または別名)を使用して、結果セットをXML文字列として戻します。
単純接続のSELECT
、UPDATE
、INSERT
またはDELETE
操作やストアド・プロシージャ・コールには、oracle.jsp.dbutil.CursorBean
を使用します。接続には定義済のConnBean
オブジェクトが使用されます。
SQL操作は、ConnBean
オブジェクトのgetCursorBean()
コールで指定できます。また、後述のようにCursorBean
オブジェクトのcreate()
、execute()
またはexecuteQuery()
メソッドのコールを介して指定することも可能です。
CursorBean
は、スクロール可能で更新可能なカーソル、バッチ更新、行プリフェッチおよび問合せタイムアウト制限をサポートしています。これらのOracle JDBC機能の詳細は、Oracle JDBC開発者ガイドおよびリファレンスを参照してください。
CursorBean
のプロパティは、次のとおりです。
executeBatch
(Oracle JDBCのバッチ更新のバッチ・サイズ)
このプロパティを設定すると、Oracle JDBCのバッチ更新が有効化されます。
preFetch
(Oracle JDBCの行プリフェッチでプリフェッチする文の数)
このプロパティを設定すると、Oracle JDBCの行プリフェッチが有効化されます。
queryTimeout
(ドライバがタイムアウトの発行前に文の実行を待機する秒数)
resultSetType
(結果セットがスクロール可能かどうか): 次のいずれかのint
定数で指定
resultSetConcurrency
(結果セットが更新可能かどうか): 次のいずれかのint
定数で指定
これらのプロパティを次のメソッドで設定すると、必要に応じてOracle JDBCの機能を有効化できます。
void setExecuteBatch(int)
int getExecuteBatch()
void setPreFetch(int)
int getPreFetch()
void setQueryTimeout(int)
int getQueryTimeout()
void setResultSetConcurrency(int)
CursorBean.CONCUR_READ_ONLY
または CursorBean.CONCUR_UPDATABLE
を指定します。
int getResultSetConcurrency()
CursorBean.CONCUR_READ_ONLY
または CursorBean.CONCUR_UPDATABLE
を戻します。
void setResultSetType(int)
CursorBean.TYPE_FORWARD_ONLY
、 CursorBean.TYPE_SCROLL_INSENSITIVE
または CursorBean.TYPE_SCROLL_SENSITIVE
を指定します。
int getResultSetType()
CursorBean.TYPE_FORWARD_ONLY
、 CursorBean.TYPE_SCROLL_INSENSITIVE
または CursorBean.TYPE_SCROLL_SENSITIVE
を戻します。
jsp:useBean
文でCursorBean
インスタンスが定義された後に問合せを実行するには、CursorBean
のメソッドを使用して2つの方法のいずれかでカーソルを作成できます。次のメソッドを使用して、カーソルを作成し、個別ステップで接続を提供します。
または、次のメソッドを使用して、プロセスを組み合せて1つのステップにします。
「データベース接続用のConnBean」の説明に従ってConnBean
オブジェクトを設定します。
それから、次のメソッドを使用して問合せを指定し、実行します。背後でJDBCのプレーンStatement
オブジェクトを使用します。
または、結果セットをHTML表またはXML文字列としてフォーマットする場合は、executeQuery()
のかわりに次のいずれかのメソッドを使用します。
String getResultAsHTMLTable(String)
結果セットのHTML表を作成するためのHTML文を含む文字列を戻します。SELECT
文を含む文字列を指定します。
String getResultAsXMLString(String)
結果セットのデータをXML文字列で戻します。SELECT
文を含む文字列を指定します。
jsp:useBean
アクションでCursorBean
インスタンスが定義された後にUPDATE
、INSERT
またはDELETE
文を実行するには、CursorBean
のメソッドを使用して2つの方法のいずれかでカーソルを作成できます。次のメソッドを使用し、カーソルを作成(文タイプを整数、SQL文を文字列として指定)して接続を提供します。
または、次のメソッドを使用して、プロセスを組み合せて1つのステップにします。
「データベース接続用のConnBean」の説明に従ってConnBean
オブジェクトを設定します。
int
の入力では、定数(Statement
オブジェクトの場合はCursorBean.PLAIN_STMT
、PreparedStatement
オブジェクトの場合はCursorBean.PREP_STMT
、CallableStatement
オブジェクトの場合はCursorBean.CALL_STMT
)を使用して、必要なJDBC文のタイプを指定します。String
の入力ではSQL文を指定します。
それから、次のメソッドを使用してINSERT
、UPDATE
またはDELETE
文を実行します(boolean
の戻り値は無視してかまいません)。
または、バッチ更新の場合は、影響を受ける行数を戻す次のメソッドを使用します。
注意:
SQL操作は、文の作成時または文の実行時のどちらかに指定します。 |
さらに、CursorBean
は、コール可能な文に対するregisterOutParameter()
、プリコンパイルされた文とコール可能な文に対する setXXX()
メソッドおよび結果セットとコール可能な文に対するgetXXX()
メソッドなどのOracle JDBC機能をサポートしています。
次のメソッドを使用してデータベース・カーソルをクローズします。
この例は、データソースでConnBean
を使用して接続をオープンし、CursorBean
を使用して問合せを実行するサンプルJSPページを示しています。
<%@ page import="java.sql.*, oracle.jsp.dbutil.*" %> <jsp:useBean id="cbean" class="oracle.jsp.dbutil.ConnBean" scope="session"> <jsp:setProperty name="cbean" property="dataSource" value="<%=request.getParameter("datasource")%>"/> </jsp:useBean> <% try { cbean.connect(); String sql="SELECT ename, sal FROM scott.emp ORDER BY ename"; CursorBean cb = cbean.getCursorBean (CursorBean.PREP_STMT, sql); out.println(cb.getResultAsHTMLTable()); cb.close(); cbean.close(); } catch (SQLException e) { out.println("<P>" + "There was an error doing the query:"); out.println("<PRE>" + e + "</PRE>\n<P>"); } %>
OC4Jには、JSPページで使用してデータベースにアクセスするためのSQLコマンドを実行できるように、一連のタグが用意されています。この項では、各タグについて説明します。この項の内容は、次のとおりです。
注意: この項で説明する各タグでは、「データ・アクセス用JavaBeans」で説明するBeanを使用します。通常、これらのBeanとタグは、適切なJDBCドライバ・クラスがあればOracle以外のデータベースで使用できます。ただし、後述する多数の機能はOracle固有のものです。 |
注意: OC4Jで提供されるカスタムSQLタグ・ライブラリはJavaServer Pages標準タグ・ライブラリ(JSTL)に先立つものであり、機能が重複する領域があります。規格準拠のため、今後は原則としてカスタム・ライブラリのかわりにJSTLを使用することをお薦めします。「JavaServer Pages標準タグ・ライブラリのサポート」を参照してください。 ただし、既存のタグがサポート対象外になったわけではありません。カスタム・ライブラリにあってJSTLでは使用できないが、一般的に役立つと思われる機能は、必要に応じて将来的にJSTL標準に採用されていく予定です。 |
OC4Jには、SQL機能について次のタグで構成されるカスタム・タグ・ライブラリが用意されています。
dbOpen
: データベース接続をオープンします。このタグは、データソースと接続プーリングもサポートしています。関連情報は、「データソースおよびプールされた接続に対するデータ・アクセスのサポート」を参照してください。
dbClose
: データベース接続をクローズします。
dbQuery
: 問合せを実行します。
dbCloseQuery
: 問合せ用のカーソルをクローズします。
dbNextRow
: 結果セットの行を処理します。
dbExecute
: SQL文(DMLまたはDDL)を実行します。
dbSetParam
: dbQuery
またはdbExecute
タグにバインドするパラメータを設定します。
dbSetCookie
: Cookieを設定します。
以降の各項では、これらのタグについて説明します。例についてはOC4Jのデモを参照してください。
SQLタグを使用する際には、次の要件に注意してください。
classes12.zip
など)をインストール済で、CLASSPATHに指定している必要があります。
ojsputil.jar
をインストール済で、CLASSPATHに指定していることを確認します。このファイルはOC4Jインストールとともに提供されます。
sqltaglib.tld
をアプリケーションとともにデプロイし、ライブラリを使用するJSPページで適切なtaglib
ディレクティブを使用する必要があります。Oracle Application Serverインストールの場合、TLDファイルは既知のタグ・ライブラリ・ディレクトリにあります。
JSPタグ・ライブラリの使用方法の概要(タグ・ライブラリ・ディスクリプタ・ファイル、taglib
ディレクティブおよび既知のタグ・ライブラリ・ディレクトリなど)は、Oracle Containers for J2EE Support for JavaServer Pages開発者ガイド 10gを参照してください。
注意:
データ・アクセス・タグを使用するアプリケーションの場合は、 |
この項では、データ・アクセス・タグの構文詳細と、データソースでのdbOpen
タグとdbQuery
タグの使用例を示します。
これらのタグを使用するサンプル・ページの全セットについては、OC4Jのデモを参照してください。
注意:
|
dbOpen
タグを使用すると、dbQuery
や dbExecute
などのタグを介して以降のSQL操作に使用するデータベース接続をオープンできます。そのためには、データソースのロケーションを指定するか(接続キャッシュがサポートされている場合)、ユーザー、パスワードおよびURLを個別に指定します。OC4Jでのデータソースの設定方法の詳細は、「データソースおよびプールされた接続に対するデータ・アクセスのサポート」を参照してください。
実装では、oracle.jsp.dbutil.ConnBean
インスタンスが使用されます。接続キャッシュではなく単純接続の場合は、オプションでstmtCacheSize
、preFetch
およびbatchSize
などのConnBean
プロパティを設定し、該当するOracle JDBC機能を有効化できます。詳細は、「データベース接続用のConnBean」を参照してください。
接続用のConnBean
オブジェクトは、dbOpen
タグのtag-extra-infoクラスのインスタンスに作成されます。標準JSPタグ・ライブラリ・フレームワークとtag-extra-infoクラスの詳細は、Oracle Containers for J2EE Support for JavaServer Pages開発者ガイド 10gを参照してください。
<sql:dbOpen [ connId = "connection_id" ] [ scope = "page" | "request" | "scope" | "application" ] [ dataSource = "JNDI_name" ] [ user = "username" password = "password" URL = "databaseURL" ] [ commitOnClose = "true" | "false" ] > ... </sql:dbOpen>
この接続を介して実行するネストしたコードを、dbOpen
の開始タグと終了タグの間のタグ本体に挿入できます。
connId
: オプションで、この属性を使用して接続のID名を指定します。このIDは以降のタグ(dbQuery
やdbExecute
など)で参照できます。また、dbQuery
タグとdbExecute
タグをdbOpen
タグ内でネストできます。接続をクローズする必要がある場合に、dbClose
タグで接続IDを参照することも可能です。
dbQuery
またはdbExecute
タグをdbOpen
タグ内でネストする場合も、接続IDを指定できます。この場合、接続は接続IDを介して検出されます。scope
属性を使用すると、同じ接続IDを指定し、ただし異なるスコープを指定して、複数の接続を使用できます。
接続IDを指定すると、接続はdbClose
タグで明示的にクローズするまでクローズされません。接続IDを指定しなければ、接続はdbOpen
終了タグが検出された時点で自動的にクローズされます。
scope
(connId
とのみ併用): この属性を使用して、接続インスタンスに必要なスコープを指定します。デフォルトはpage
スコープです。
dbOpen
タグでスコープ設定を指定した場合は、同じ接続IDを使用する他のタグ(dbQuery
、dbExecute
またはdbClose
)でも同じスコープ設定を指定する必要があります。
dataSource
(user
、password
およびURL
の各属性を設定しない場合は必須): オプションで、この属性を使用してデータベース接続用データソースのJNDI名を指定します。まずOC4Jのdata-sources.xml
ファイルでデータソースを設定します(「データソースおよびプールされた接続に対するデータ・アクセスのサポート」 を参照)。dataSource
の設定は、data-sources.xml
の<data-source>
要素のlocation
名、ejb-location
名またはpooled-location
名に対応している必要があります。
データソースではURL設定を指定する必要がありますが、ユーザー/パスワードのペアを指定する必要はありません。かわりにdbOpen
タグのuser
属性とpassword
属性を使用できます。
この属性は、OC4J環境でのみサポートされています。
user
(データソースを介してユーザー/パスワードのペアを指定しない場合に必須): データベース接続に使用するユーザー名です。
データソースとuser
属性の両方でユーザー名を指定した場合は、user
属性が優先されます。データソースが別のユーザー名を使用した既存の論理接続を持つプールされた接続の場合は、競合が発生する可能性があるため、このような重複指定は避けることをお薦めします。
password
(データソースを介してユーザー/パスワードのペアを指定しない場合に必須): データベース接続に使用するユーザー・パスワードです。
明らかにセキュリティ上の問題となるため、パスワードをJSPページにハードコード化しないでください。かわりに、次のようにrequest
オブジェクトからパスワードや他のパラメータを取得できます。
<sql:dbOpen connId="conn1" user='<%=request.getParameter("user")%>' password='<%=request.getParameter("password")%>' URL="url" />
user
属性と同様に、データソースとpassword
属性の両方でパスワードを指定した場合は、password
属性が優先されます。
URL
(データソースを指定しない場合に必須): データベース接続に使用するURLです。データソースを介してURLを指定すると、dbOpen
タグのURL
属性が無視されます。
commitOnClose
: この属性を true
に設定すると、接続がクローズされるかスコープ外になった時点で自動SQLコミットが実行されます。デフォルトのfalse
に設定すると、自動SQLロールバックが実行されます。
便宜上、アプリケーション単位の自動commit
またはrollback
動作を指定する場合は、次の例に示すようにアプリケーションのweb.xml
ファイル内でパラメータ名commit-on-close
を設定してください。
<context-param> <param-name>commit-on-close</param-name> <param-value>true</param-value> </context-param>
dbOpen
タグでのcommitOnClose
設定は、web.xml
でのcommit-on-close
設定よりも優先されます。
dbClose
タグを使用すると、dbOpen
タグで指定したオプションのconnId
パラメータに関連付けられている接続をクローズできます。dbOpen
タグでconnId
を使用しなければ、接続はdbOpen
終了タグに達した時点で自動的にクローズされます。dbClose
タグは不要です。
<sql:dbClose connId = "connection_id" [ scope = "page" | "request" | "scope" | "application" ] />
connId
(必須): クローズ対象の接続をオープンしたdbOpen
タグで指定されている接続IDです。
scope
: 接続インスタンスのスコープです。デフォルトはpage
ですが、dbOpen
タグでpage
以外のスコープを指定した場合は、それと同じスコープをdbClose
タグでも指定する必要があります。
dbQuery
タグを使用すると、問合せを実行して結果をJDBC結果セット、HTML表、XML文字列またはXML DOMオブジェクトとして出力できます。SELECT
文(1つのみ)をdbQuery
の開始タグと終了タグの間のタグ本体に挿入します。
このタグではカーソルにoracle.jsp.dbutil.CursorBean
オブジェクトが使用されるため、必要に応じて結果セットのタイプ、結果セットの並行性、バッチ・サイズおよびプリフェッチ・サイズなどのプロパティを設定できます。CursorBean
機能の詳細は、「DMLおよびストアド・プロシージャ用のCursorBean」を参照してください。
XMLを使用する場合、このタグはXMLプロデューサとして機能します。詳細は、「XMLプロデューサとXMLコンシューマ」を参照してください。また、「transformタグとdbQueryタグの使用例」も参照してください。
<sql:dbQuery [ queryId = "query_id" ] [ connId = "connection_id" ] [ scope = "page" | "request" | "scope" | "application" ] [ output = "HTML" | "XML" | "JDBC" ] [ maxRows = "number" ] [ skipRows = "number" ] [ bindParams = "value" ] [ toXMLObjName = "objectname" ] > ...SELECT statement (one only)... </sql:dbQuery>
重要:
|
queryId
: この属性を使用すると、カーソルのID名を指定できます。結果の処理にdbNextRow
タグを使用する場合、この属性が必須です。
queryId
パラメータがあると、dbCloseQuery
タグを使用して明示的にクローズするまで、カーソルはクローズされません。問合せIDを指定しなければ、 dbQuery
終了タグに達した時点でカーソルが自動的にクローズされます。これはリクエスト時属性ではなく、JSP式の値は使用できません。
connId
: 接続をオープンしたdbOpen
タグのconnId
設定に従ったデータベース接続IDです。dbQuery
タグでconnId
を指定しない場合は、このタグをdbOpen
タグの本体内でネストする必要があり、dbOpen
タグでオープンした接続が使用されます。これはリクエスト時属性ではありません。
scope
: 接続インスタンスのスコープです。デフォルトはpage
ですが、関連dbOpen
タグで page
以外のスコープを指定した場合は、それと同じスコープをdbQuery
タグでも指定する必要があります。これはリクエスト時属性ではありません。
output
: 必要な出力フォーマット(次のいずれか)です。
maxRows
: データの最大表示行数です。
skipRows
: 結果を表示する前に問合せ結果内でスキップするデータ行数です。
bindParams
: この属性を使用すると、問合せにパラメータをバインドできます。次の例は、従業員番号の入力を求めるアプリケーションから抜粋したもので、bindParams
を使用して指定の値を問合せのempno
フィールドにバインドしています。
<sql:dbQuery connId="con1" bindParams="empno"> select * from EMP where empno=? </sql:dbQuery>
または、dbSetParam
タグでパラメータ値を設定し、bindParams
属性を介してバインドする方法もあります。「SQL dbSetParamタグ」を参照してください。
toXMLObjName
: 結果をXML DOMオブジェクトとして出力する場合は、XMLオブジェクト名を指定します(output
もXML
に設定します)。
dbCloseQuery
タグを使用すると、dbQuery
タグで指定したオプションのqueryId
パラメータに関連付けられているカーソルをクローズできます。dbQuery
タグでqueryId
を指定しなければ、dbQuery
の終了タグに達した時点でカーソルが自動的にクローズされます。dbCloseQuery
タグは不要です。
<sql:dbCloseQuery queryId = "query_id" />
dbNextRow
タグを使用すると、指定のqueryId
に関連付けられていてdbQuery
タグで取得した結果セットの各行を処理できます。処理コードは、dbNextRow
の開始タグと終了タグの間のタグ本体に挿入します。本体は、結果セットの各行に対して実行されます。
dbNextRow
タグを使用するには、dbQuery
タグでoutput
をJDBC
に設定し、dbNextRow
タグで参照するqueryId
を指定する必要があります。
結果セット・オブジェクトは、dbQuery
タグのtag-extra-infoクラスのインスタンスに作成されます。標準JSPタグ・ライブラリ・フレームワークとtag-extra-infoクラスの詳細は、Oracle Containers for J2EE Support for JavaServer Pages開発者ガイド 10gを参照してください。
<sql:dbNextRow queryId = "query_id" > ...Row processing... </sql:dbNextRow >
次の例に、dbOpen
タグ、dbQuery
タグおよびdbNextRow
タグを組み合せて使用する方法を示します。
<sql:dbOpen connId="con1" URL="jdbc:oracle:thin:@myhost:1521:816" user="scott" password="tiger"> </sql:dbOpen> <sql:dbQuery connId="con1" output="jdbc" queryId="myquery"> select * from EMP </sql:dbQuery> <sql:dbNextRow queryId="myquery"> <%= myquery.getString(1) %> </sql:dbNextRow> <sql:dbCloseQuery queryId="myquery" /> <sql:dbClose connId="con1" />
dbExecute
タグを使用すると、DML文またはDDL文を1つ実行できます。文はdbExecute
の開始タグと終了タグの間のタグ本体に挿入します。
このタグではカーソルにoracle.jsp.dbutil.CursorBean
オブジェクトを使用します。CursorBean
機能の詳細は、「DMLおよびストアド・プロシージャ用のCursorBean」を参照してください。
<sql:dbExecute [ connId = "connection_id" ] [ scope = "page" | "request" | "scope" | "application" ] [ output = "yes" | "no" ] [ bindParams = "value" ] > ...DML or DDL statement (one only)... </sql:dbExecute >
重要:
|
connId
: 接続をオープンしたdbOpen
タグのconnId
設定に従ったデータベース接続IDです。dbExecute
タグでconnId
を指定しない場合は、このタグをdbOpen
タグの本体内でネストする必要があり、dbOpen
タグでオープンした接続が使用されます。
scope
: 接続インスタンスのスコープです。デフォルトはpage
ですが、dbOpen
タグでpage
以外のスコープを指定した場合は、それと同じスコープをdbExecute
タグでも指定する必要があります。
output
: output="yes"
に設定すると、DML文の場合はHTML文字列"number row[s] affected"がブラウザに出力され、操作の影響を受けたデータベース行数がユーザーに通知されます。DDL文の場合は、文の実行ステータスが出力されます。デフォルトは"no
"です。
bindParams
: この属性を使用すると、SQL文にパラメータをバインドできます。次の例は、従業員番号の入力を求めるアプリケーションから抜粋したもので、bindParams
を使用して指定の値をDELETE
文のempno
フィールドにバインドしています。
<sql:dbExecute connId="con1" bindParams="empno"> delete from EMP where empno=? </sql:dbExecute>
または、dbSetParam
タグでパラメータ値を設定し、bindParams
属性を介してバインドする方法もあります。次の「SQL dbSetParamタグ」を参照してください。
このタグを使用すると、dbQuery
タグを介して問合せにバインドするパラメータ値、またはdbExecute
タグを介して他のSQL操作にバインドするパラメータ値を設定できます。
注意:
データ・アクセス・タグを使用するアプリケーションの場合は、 |
<sql:dbSetParam name = "param_name" value = "param_value" [ scope = "page" | "request" | "scope" | "application" ] />
次の例では、dbSetParam
タグを使用してid2
というパラメータの値を設定しています。この値はdbExecute
タグ内のSQL文にバインドされます。
<sql:dbSetParam name="id2" value='<%=request.getParameter("id")%>' scope="session" /> Result: <HR> <sql:dbOpen URL="<%= connStr %>" user="scott" password="tiger"> <sql:dbExecute output="yes" bindParams="id2 name job sal"> insert into emp(empno, ename, deptno, job, sal) values (?, ?, 20, ?, ?) </sql:dbExecute> </sql:dbOpen> <HR>
このタグを使用するとCookieを設定できます。dbSetCookie
タグは、標準javax.servlet.http.Cookie
クラスの機能をラップします。
<sql:dbSetCookie name = "cookie_name" [ value = "cookie_value" ] [ domain = "domain_name" ] [ comment = "comment" ] [ maxAge = "age" ] [ version = "protocol_version" ] [ secure = "true" | "false" ] [ path = "path" ] />
name
(必須): Cookie名です。
value
: 必要なCookie値です。NULL値のCookieを使用できるため、この属性は必須ではありません。
domain
: Cookieのドメイン名です。ドメイン名は、RFC 2019仕様に従った書式で指定します。
comment
: Cookieの目的を説明するコメントです。
maxAge
: Cookieの最大許容有効秒数です。ブラウザがシャットダウンされるまでCookieを存続させるには、" -1
"設定を使用します。
version
: Cookieが準拠するHTTPプロトコルのバージョンです。
secure
: Cookieの送信にHTTPSやSSLなどのセキュア・プロトコルを使用するかどうかをブラウザに通知します。
path
: Cookieのファイル・システム・パス(クライアントからCookieが戻されるロケーション)を指定します。
<sql:dbSetCookie name="cId" value='<%=request.getParameter("id")%>' maxAge='800000' />
この項では、データソースでdbOpen
タグを使用して接続をオープンし、dbQuery
タグを使用して問合せを実行するサンプルJSPページを示します。
<%@ taglib uri="/WEB-INF/sqltaglib.tld" prefix="sql" %> <HTML> <BODY> <sql:dbOpen dataSource='<%=request.getParameter("datasource") %>' connId="con1"> </sql:dbOpen> <sql:dbQuery connId="con1"> SELECT * FROM emp ORDER BY ename </sql:dbQuery> <sql:dbClose connId="con1" /> </BODY> </HTML>
Copyright © 1997, 2007, Oracle. All rights reserved.