Oracle Application Server Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス 10g(9.0.4) |
|
このトピックでは、OC4Jが提供する、サーブレットおよびJSPページからデータベースへのアクセスに使用するJavaBeansとタグについて説明します。
このトピックの構成は、次のとおりです。
OC4J製品には、データベースへのアクセスに使用できる一連のJavaBeansが含まれています。この項は、次の内容で構成され、Beanについて説明します。
注意: ここで説明するJavaBeansは、「データ・アクセス用SQLタグ」で説明するタグで使用します。一般的に、これらのBeanとタグは、適切なJDBCドライバ・クラスがあることを前提として、Oracle以外のデータベースで使用できます。ただし、後述されている機能の多くは、注意にあるようにOracle固有の機能です。 |
OC4Jには、データベースにアクセスするための一連のカスタムJavaBeansが用意されています。 oracle.jsp.dbutil
パッケージには、次のBeansが含まれます。
ConnBean
は、データベース接続をオープンします。 このBeanは、データ・ソースおよび接続プーリングもサポートします。 詳細は、「データ・ソースと接続プーリングを使用したデータ」を参照してください。
ConnCacheBean
では、データベース接続にOracle JDBCの接続キャッシング実装が使用されます。このBeanには、JDBC 2.0が必要です。
DBBean
は、データベース問合せを実行します。それ自体に接続機能がありますが、データ・ソースはサポートしません。
CursorBean
は、問合せ(UPDATE
文、INSERT
文およびDELETE
文)およびストアド・プロシージャ・コールに対する一般的なDMLサポートを提供します。
この項の説明は、Oracle JDBCの操作知識があることを前提にしています。 必要に応じて、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。
データ・アクセスJavaBeansを使用するには、ojsputil.jar
ファイルがインストール済で、クラスパスに存在していることを確認してください。このファイルは、OC4Jのインストール時にインストールされます。 XML関連のメソッドおよび機能に関しては、Oracle Application Serverで提供されるxsu12.jar
(JDK 1.2.x)またはxsu111.jar
(JDK 1.1.x)のファイルも必要です。
また、OracleデータベースおよびJDK 1.2以上の場合は、classes12.zip
などの適切なJDBCドライバ・クラスがインストールされ、クラスパスに存在している必要があります。
データ・アクセス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 Application Server Containers for J2EEサービス・ガイド』を参照してください。
この項では、データ・アクセス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
プロパティには、移行を簡素化するための下位互換性があります。
アプリケーション全体のcommit-on-close
がアプリケーションのweb.xml
ファイルで設定されている場合がありますが、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」を参照してください。
データベース接続の場合は、oracle.jsp.dbutil.ConnCacheBean
を使用して、Oracle JDBCの接続キャッシング機能を使用し、JDBC 2.0の接続プーリングを使用します。 接続キャッシングの詳細は、『Oracle9i JDBC開発者ガイドおよびリファレンス』を参照してください。
注意:
|
ConnCacheBean
には、次のプロパティがあります。
user
(データベース・スキーマのユーザーID)
password
(ユーザー・パスワード)
URL
(データベース接続文字列)
maxLimit
(このキャッシュによる許容最大接続数)
minLimit
(このキャッシュに存在する最小接続数)
使用接続数がこの最小接続数に満たない場合は、キャッシュのアイドル・プールにも接続があります。
stmtCacheSize
(Oracle JDBCの文のキャッシング用キャッシュ・サイズ)
stmtCacheSize
を設定すると、Oracle JDBCの文のキャッシング機能を有効にできます。 Oracle JDBCの文のキャッシング機能と制限の詳細は、『Oracle9i JDBC開発者ガイドおよびリファレンス』を参照してください。
cacheScheme
(次のいずれかのint
型の定数によって示されたキャッシュのタイプ)
ConnCacheBean
クラスは、プロパティを取得および設定する次のメソッドも含め、Oracle JDBCのOracleConnectionCacheImpl
クラスに定義されているメソッドをサポートします。
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メソッドの詳細は、『Oracle9i JDBC開発者ガイドおよびリファレンス』を参照してください。
次のメソッドを使用して、接続をオープンおよびクローズします。
Connection getConnection()
ConnCacheBean
プロパティの設定を使用して、接続のキャッシュから接続を取得します。
void close()
接続とオープン中のカーソルをすべてクローズします。
ConnCacheBean
クラスでは、Oracle JDBCのバッチ更新および行のプリフェッチを直接サポートしませんが、getConnection()
メソッドで取得するConnection
オブジェクトのsetDefaultExecuteBatch(int)
メソッドおよびsetDefaultRowPrefetch(int)
メソッドをコールすることで、これらの機能を有効にできます。 Connection
オブジェクトから作成したJDBCの文オブジェクトのsetExecuteBatch(int)
メソッドおよびsetRowPrefetch(int)
メソッドを使用することもできます。(バッチ更新は、プリコンパイルされたSQL文でのみサポートされます。) これらの機能の詳細は、『Oracle9i 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のこれらの機能の詳細は、『Oracle9i 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
を返します。
CursorBean
インスタンスをjsp:useBean
文で定義した後に問合せを実行するには、CursorBean
メソッドを使用し、次の2つのいずれかの方法でカーソルを作成できます。カーソルを作成し、個別のステップで接続を指定するには、次のメソッドを使用します。
または、次のメソッドを使用してプロセスを単一のステップに組み込むこともできます。
ConnBean
オブジェクトの設定は、「データベース接続用ConnBean」を参照してください。
次に、次のメソッドを使用して、問合せを指定および実行します。 これには、JDBCの単純なStatement
オブジェクトが背後で使用されます。
結果セットをHTML表またはXML文字列としてフォーマットする場合は、executeQuery()
のかわりに、次のいずれかのメソッドを使用します。
String getResultAsHTMLTable(String)
結果セットにHTML表を作成するために、HTML文の文字列を戻します。 SELECT
文が含まれた文字列を入力します。
String getResultAsXMLString(String)
結果セットのデータをXML文字列で戻します。 SELECT
文が含まれた文字列を入力します。
CursorBean
インスタンスをjsp:useBean
操作で定義した後にUPDATE
文、INSERT
文またはDELETE
文を実行するには、CursorBean
のメソッドを使用し、次の2つのいずれかの方法でカーソルを作成できます。次のメソッドを使用して、カーソルを作成(文のタイプを整数で、SQL文を文字列で指定)し、接続を指定します。
または、次のメソッドを使用してプロセスを単一のステップに組み込むこともできます。
ConnBean
オブジェクトの設定は、「データベース接続用ConnBean」を参照してください。
int
型の入力は、次の定数のいずれかを取得して、JDBCの文のタイプを指定します。 Statement
オブジェクトにはCursorBean.PLAIN_STMT
、PreparedStatement
オブジェクトにはCursorBean.PREP_STMT
、CallableStatement
オブジェクトにはCursorBean.CALL_STMT
を取得します。 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には、データベースにアクセスするSQLコマンドを実行するために、JSPページで使用できる一連のタグがあります。この項は、次の内容で構成され、タグについて説明します。
注意: この項で説明するタグは、「データ・アクセスに関するJavaBeans」で説明されているBeanを使用します。一般的に、これらのBeanとタグは、適切なJDBCドライバ・クラスがあることを前提として、Oracle以外のデータベースで使用できます。ただし、後述されている機能の多くは、注意にあるようにOracle固有の機能です。 |
注意: JavaServer Pages標準タグ・ライブラリ(JSTL)と、すでにOC4Jが提供しているSQLカスタム・タグ・ライブラリには、重複する機能が含まれています。標準準拠で作業を進める場合は、原則として、カスタム・ライブラリではなく、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
など、適切なJDBCドライバ・ファイルがインストール済で、クラスパスに存在している必要があります。
ojsputil.jar
ファイルがインストール済で、クラスパスに存在していることを確認してください。このファイルは、OC4Jのインストール時にインストールされます。
sqltaglib.tld
が、アプリケーションとともにデプロイされている必要があります。また、ライブラリを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。 Oracle Application Serverのインストール時、TLDファイルは、予約済のタグ・ライブラリ・ディレクトリに置かれます。
JSPタグ・ライブラリの使用、タグ・ライブラリ・ディスクリプタ・ファイル、taglib
ディレクティブおよび予約済のタグ・ライブラリ・ディレクトリに関する一般情報は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
注意: データ・アクセス・タグを使用するアプリケーションでは、 |
この項では、データ・アクセス・タグの詳細な構文について説明し、データ・ソースでのdbOpen
タグとdbQuery
タグの使用例を紹介します。
これらのタグを使用した完全なサンプル・ページは、OC4Jのデモを参照してください。
注意:
|
dbOpen
タグを使用して、dbQuery
やdbExecute
などのタグを介した後続のSQL操作用のデータベース接続をオープンします。オープンするには、データ・ソースの場所を指定(この場合、接続キャッシュがサポートされます)するか、ユーザー、パスワードおよびURLを個別に指定します。 OC4Jでデータ・ソースを設定する方法の詳細は、「データ・ソースと接続プーリングを使用したデータ」を参照してください。
実装には、oracle.jsp.dbutil.ConnBean
インスタンスを使用します。 単純な接続で、接続のキャッシュを使用しない場合は、必要に応じて、stmtCacheSize
、preFetch
およびbatchSize
などのConnBean
のプロパティを設定し、Oracle JDBCの機能を有効にできます。 詳細は、「データベース接続用ConnBean」を参照してください。
接続するためのConnBean
オブジェクトは、dbOpen
タグのタグ補足情報クラスのインスタンスに作成されます。 標準のJSPタグ・ライブラリのフレームワークとタグ補足情報クラスの詳細は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
<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
タグ内にネストすることもできます。 この接続IDは、接続をクローズするときにdbClose
タグ内で参照することもできます。
接続IDは、dbQuery
タグまたはdbExecute
タグをdbOpen
タグ内にネストする場合にも指定できます。 この場合、接続は接続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
(必須): 接続をクローズするためのIDで、接続をオープンしたdbOpen
タグに指定したIDです。
scope
: 接続インスタンスのスコープです。 デフォルトは「page
」です。ただし、dbOpen
タグにpage
以外のスコープを指定した場合は、dbClose
タグにも同じスコープを指定する必要があります。
dbQuery
タグを使用して問合せを実行し、JDBC 結果セット、HTML表、XML文字列またはXML DOMオブジェクトのいずれかで、結果を出力します。 dbQuery
開始タグと終了タグの間のタグ・ボディに、SELECT
文(1文のみ)を指定します。
このタグは、カーソルに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
: データベース接続用のIDで、接続をオープンしたdbOpen
タグのconnId
設定に従います。 dbQuery
タグにconnId
を指定しない場合は、そのタグをdbOpen
タグのボディにネストし、dbOpen
タグでオープンした接続を使用する必要があります。 この属性は、リクエスト時属性ではありません。
scope
: 接続インスタンスのスコープです。 デフォルトは「page
」です。ただし、関連するdbOpen
タグにpage
以外のスコープを指定した場合は、dbQuery
タグにも同じスコープを指定する必要があります。 この属性は、リクエスト時属性ではありません。
output
: 任意の出力フォーマットです。次のいずれかを指定します。
maxRows
: 表示データの最大行数です。
skipRows
: 結果の表示前にスキップする、問合せ結果内のデータ行の数です。
bindParams
: パラメータを問合せにバインドします。 次は、従業員番号の入力プロンプトをユーザーに表示するアプリケーションの例です。ここでは、指定された値を問合せのempno
フィールドにバインドするbindParams
を使用しています。
<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
タグを使用して、dbQuery
タグで取得し、指定したqueryId
に関連付けられている結果セットの各行を処理します。 dbNextRow
開始タグと終了タグの間のタグ・ボディに、処理コードを指定します。このボディは、結果セットの各行に対して実行されます。
dbNextRow
タグを使用するには、dbQuery
タグで、output
をJDBC
に設定し、queryId
を、参照するdbNextRow
タグに指定する必要があります。
結果セット・オブジェクトは、dbQuery
タグのタグ補足情報クラスのインスタンスに作成されます。 標準のJSPタグ・ライブラリのフレームワークとタグ補足情報クラスの詳細は、『Oracle Application Server Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
<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文を実行します。 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
: データベース接続用のIDで、接続をオープンしたdbOpen
タグのconnId
設定に従います。 dbExecute
タグにconnId
を指定しない場合は、そのタグをdbOpen
タグのボディにネストし、dbOpen
タグでオープンした接続を使用する必要があります。
scope
: 接続インスタンスのスコープです。 デフォルトは「page
」です。ただし、dbOpen
タグにpage
以外のスコープを指定した場合は、dbExecute
タグにも同じスコープを指定する必要があります。
output
: output="yes"
のとき、DML文の場合は、HTML文字列「number行が影響を受けました。」がブラウザに出力され、操作によって影響を受けたデータベースの行数がユーザーに通知されます。DDL文の場合は、文の実行ステータスが出力されます。 デフォルトは「no
」です。
bindParams
: パラメータをSQL文にバインドします。 次は、従業員番号の入力プロンプトをユーザーに表示するアプリケーションの例です。ここでは、指定された値をDELETE
文のempno
フィールドにバインドするbindParams
を使用しています。
<sql:dbExecute connId="con1" bindParams="empno"> delete from EMP where empno=? </sql:dbExecute>
dbSetParam
タグで設定したパラメータ値をbindParams
属性を介してバインドすることもできます。 次項の「SQL dbSetParamタグ」を参照してください。
このタグを使用すると、問合せにバインド(dbQuery
タグを使用)またはその他のSQL操作にバインド(dbExecute
タグを使用)するパラメータ値を設定できます。
注意: データ・アクセス・タグを使用するアプリケーションでは、 |
<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の値です。Cookieではnull値が許可されるため、この属性は必須ではありません。
domain
: Cookieのドメイン名です。ドメイン名のフォームは、RFC 2019の仕様に従います。
comment
: Cookieの目的を説明するコメントです。
maxAge
: Cookieの許容最大時間(秒単位)です。 「-1
」に設定すると、Cookieはブラウザが停止するまで保持されます。
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, 2004, Oracle. All rights reserved.