Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス 10g(10.1.3.1.0) B31854-01 |
|
この章では、OC4Jが提供する、サーブレットおよびJSPページからデータベースへのアクセスに使用するJavaBeansとタグについて説明します。
この章には、次の項目が含まれます。
OC4J製品には、データベースへのアクセスに使用できる一連のJavaBeansが含まれています。次の各項でBeanについて説明します。
ここで説明するJavaBeansは、「データ・アクセス用SQLタグ」で説明されているタグで使用します。一般的に、これらのBeanとタグは、適切なJDBCドライバ・クラスがあることを前提として、Oracle以外のデータベースで使用できます。ただし、後述されている機能の多くは、注意にあるようにOracle固有の機能です。
注意
OC4Jには、データベースにアクセスするための一連のカスタムJavaBeansが用意されています。oracle.jsp.dbutil
パッケージには、次のBeanが含まれています。
ConnBean
は、データベース接続をオープンします。このBeanは、データ・ソースおよび接続プーリングもサポートします。関連情報は、「データ・ソースと接続プーリング用のデータ・アクセスのサポート」を参照してください。
CursorBean
は、問合せ(UPDATE
、INSERT
およびDELETE
文)およびストアド・プロシージャ・コールに対する一般的なDMLサポートを提供します。
廃止されたJavaBeansの詳細は、付録B「データ・アクセスに関する廃止JavaBeans」を参照してください。
注意
ConnCacheBean
およびDBBean
は、Oracle Application Server 10gリリース3(10.1.3)では廃止されました。
ConnCacheBean
が拡張するOracleConnectionCacheImpl
も廃止されます。
この項の説明は、Oracle JDBCの操作知識があることを前提にしています。必要に応じて、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。
データ・アクセスJavaBeansを使用するには、ojsputil.jar
ファイルがインストール済で、クラスパスに存在していることを確認してください。このファイルは、OC4Jのインストール時にインストールされます。
また、Oracle DatabaseおよびJDK 1.2以上の場合は、classes12.zip
などの適切なJDBCドライバ・クラスがインストール済で、クラスパスに存在している必要があります。
注意
Oracleのデータ・アクセスJavaBeansでは、イベント通知のためにOracle |
データ・アクセス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" />
列挙データ・ソースのJNDI参照では、ejb-location
JNDI名のみの使用をお薦めします。データ・ソースの詳細は、『Oracle Containers for J2EEサービス・ガイド』を参照してください。
次の各項では、データ・アクセスJavaBeans(ConnBean
および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
」で指定commitOnClose
の値は、接続のクローズ時にcommit
を自動的に実行するかどうかを示します。「true
」に設定するとcommit
が実行され、「false
」に設定するとrollback
が実行されます。Oracle9iASリリース2より前では、常にcommit
が自動的に実行されましたが、現行のリリースのデフォルトは自動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」を参照してください。
単純な接続でのSELECT
、UPDATE
、INSERT
またはDELETE
の各操作またはストアド・プロシージャ・コールには、oracle.jsp.dbutil.CursorBean
を使用します。接続には、事前定義のConnBean
オブジェクトが使用されます。
SQL操作は、ConnBean
オブジェクトのgetCursorBean()
コールに指定するか、または後述のようにCursorBean
オブジェクトのcreate()
、execute()
またはexecuteQuery()
メソッドのいずれかをコールすることによって指定できます。
CursorBean
は、スクロール可能で更新可能なカーソル、バッチ更新、行のプリフェッチおよび問合せタイムアウト制限をサポートしています。
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
型の入力には、Statement
オブジェクト用のCursorBean.PLAIN_STMT
、PreparedStatement
オブジェクト用のCursorBean.PREP_STMT
またはCallableStatement
オブジェクト用のCursorBean.CALL_STMT
のいずれかの定数を使用して、JDBC文のタイプを指定します。String
への入力は、SQL文を指定します。
次のメソッドを使用して、INSERT
文、UPDATE
文またはDELETE
文を実行します。boolean
戻り値は無視してもかまいません。
また、バッチ更新の場合は、次のメソッドを使用して影響を受けた行数を戻します。
さらに、CursorBean
は、コール可能文に対するregisterOutParameter()
、プリコンパイルされたSQL文とコール可能文に対するset
XXX
()
、および結果セットとコール可能文に対するget
XXX
()
など、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ページで使用できる一連のタグがあります。次の各項では各タグについて説明します。
OC4Jが提供するSQLカスタム・タグ・ライブラリは、JavaServer Pages標準タグ・ライブラリ(JSTL)より前に開発され、JSTLと重複する機能が含まれています。標準に準拠するために、原則として、JSTLの使用をお薦めします。第2章「JavaServer Pages標準タグ・ライブラリのサポート」を参照してください。
JSTLで使用できないカスタム・ライブラリの機能のうち、有効と判断される機能は、必要に応じて、JSTL標準に採用される予定です。
注意
OC4Jには、SQL機能に関するカスタム・タグ・ライブラリが用意されています。次のタグで構成されます。
dbOpen
: データベース接続をオープンします。このタグは、データ・ソースおよび接続プーリングもサポートします。関連情報は、「データ・ソースと接続プーリング用のデータ・アクセスのサポート」を参照してください。
dbClose
: データベース接続をクローズします。
dbQuery
: 問合せを実行します。
dbCloseQuery
: 問合せのカーソルをクローズします。
dbNextRow
: 結果セットの行を処理します。
dbExecute
: SQL文(DMLまたはDDL)を実行します。
dbSetParam
: パラメータを設定して、dbQuery
タグまたはdbExecute
タグにバインドします。
dbSetCookie
: Cookieを設定します。
SQLタグを使用する場合は、次の要件に注意してください。
classes12.zip
など、適切なJDBCドライバ・ファイルがインストール済で、クラスパスに存在している必要があります。
ojsputil.jar
ファイルがインストール済で、クラスパスに存在していることを確認してください。このファイルは、OC4Jのインストール時に予約済のタグ・ライブラリ・ディレクトリにインストールされます。
sqltaglib.tld
が、アプリケーションで使用可能である必要があります。また、ライブラリを使用するJSPページには、適切なtaglib
ディレクティブが存在する必要があります。Oracle Application Serverのインストール時、TLDはojsputil.jar
に配置されます。sqltaglib.tld
のuri
値は次のとおりです。
http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/sqltaglib.tld
タグ・ライブラリ・ディスクリプタ・ファイル、taglib
ディレクティブ、予約済のタグ・ライブラリ・ディレクトリおよびuri
値の内容などを含むJSPタグ・ライブラリの使用方法に関する一般情報は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。
注意
|
次の各項では、データ・アクセス・タグの詳細な構文について説明し、データ・ソースでのdbOpen
タグとdbQuery
タグの使用例を紹介します。
注意
taglib
ディレクティブに指定できます。
dbOpen
タグを使用し、dbQuery
やdbExecute
などのタグを使用した後続のSQL操作のために、データベース接続をオープンします。オープンするには、データ・ソースの場所を指定(この場合、接続キャッシュがサポートされます)するか、ユーザー、パスワードおよびURLを個別に指定します。OC4Jでデータ・ソースを設定する方法の詳細は、「データ・ソースと接続プーリング用のデータ・アクセスのサポート」を参照してください。
実装には、oracle.jsp.dbutil.ConnBean
インスタンスを使用します。単純な接続で、接続のキャッシュを使用しない場合は、必要に応じて、stmtCacheSize
、preFetch
およびbatchSize
などのConnBean
のプロパティを設定し、Oracle JDBCの機能を有効にできます。詳細は、「データベース接続用ConnBean」を参照してください。
接続するためのConnBean
オブジェクトは、dbOpen
タグのタグ補足情報クラスのインスタンスに作成されます。標準のJSPタグ・ライブラリのフレームワークとタグ補足情報クラスの詳細は、『Oracle 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
の設定は、location
名とejb-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 commitが実行されます。デフォルトの「false
」に設定すると、自動的にSQL rollbackが実行されます。便宜上、アプリケーション全体で自動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
タグは不要です。
OC4J提供のJspScopeListener
ユーティリティを使用すると、セッション・ベースのイベント処理で接続を自動的に閉じられることに注意してください。詳細は、「JspScopeListenerによるJSPのイベント処理」を参照してください。
<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
: 問合せ結果を表示する前に、結果内でスキップするデータ行の数です。デフォルトは0です。
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 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 dataSource="<%= dataSrcStr %>" > <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などの保護プロトコルを使用して送信されるかどうかをブラウザに通知します。
path
: Cookieのファイル・システム・パス(クライアントがCookieを戻す場所)を指定します。
<sql:dbSetCookie name="cId" value='<%=request.getParameter("id")%>' maxAge='800000' />
次のサンプルは、データ・ソースでdbOpen
タグを使用して接続をオープンしてから、dbQuery
タグを使用して問合せを実行するJSPページを示しています。
<%@ taglib uri=" http://xmlns.oracle.com/j2ee/jsp/tld/ojsp/ 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 © 2002, 2006 Oracle Corporation. All Rights Reserved. |
|