| 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文とコール可能文に対する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ページで使用できる一連のタグがあります。次の各項では各タグについて説明します。
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. |
|