ヘッダーをスキップ

Oracle Containers for J2EE JSPタグ・ライブラリおよびユーティリティ・リファレンス
10g(10.1.3.1.0)

B31854-01
目次
目次
索引
索引

戻る 次へ

3 データ・アクセスJavaBeansとデータ・アクセス・タグ

この章では、OC4Jが提供する、サーブレットおよびJSPページからデータベースへのアクセスに使用するJavaBeansとタグについて説明します。

この章には、次の項目が含まれます。

データ・アクセスに関するJavaBeans

OC4J製品には、データベースへのアクセスに使用できる一連のJavaBeansが含まれています。次の各項でBeanについて説明します。

データ・アクセスJavaBeansの概要

OC4Jには、データベースにアクセスするための一連のカスタムJavaBeansが用意されています。oracle.jsp.dbutilパッケージには、次のBeanが含まれています。

この項の説明は、Oracle JDBCの操作知識があることを前提にしています。必要に応じて、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

データ・アクセスJavaBeansを使用するには、ojsputil.jarファイルがインストール済で、クラスパスに存在していることを確認してください。このファイルは、OC4Jのインストール時にインストールされます。

また、Oracle DatabaseおよびJDK 1.2以上の場合は、classes12.zipなどの適切なJDBCドライバ・クラスがインストール済で、クラスパスに存在している必要があります。


注意

Oracleのデータ・アクセスJavaBeansでは、イベント通知のためにOracle JspScopeListenerインタフェースが実装されます。このインタフェースの詳細は、「JspScopeListenerによるJSPのイベント処理」を参照してください。 


データ・ソースと接続プーリング用のデータ・アクセスのサポート

データ・アクセス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の説明

次の各項では、データ・アクセスJavaBeans(ConnBeanおよびCursorBean)の属性とメソッドについて、データ・ソースを使用する例を含めて説明します。

データベース接続用ConnBean

oracle.jsp.dbutil.ConnBeanを使用して、単純なデータベース接続(プーリングやキャッシングを使用しない接続)を確立します。

ConnBeanには、次のプロパティがあります。データ・ソースを使用する場合、userpasswordおよびURLの各プロパティは不要です。

ConnBeanには、次のようなプロパティのsetterメソッドとgetterメソッドが用意されています。

次のメソッドを使用して、接続のオープンとクローズ、または接続の状態を確認します。

カーソルをオープンし、CursorBeanオブジェクトを戻すには、次のメソッドを使用します。

または

CursorBean機能の詳細は、「DMLとストアド・プロシージャ用CursorBean」を参照してください。

DMLとストアド・プロシージャ用CursorBean

単純な接続でのSELECTUPDATEINSERTまたはDELETEの各操作またはストアド・プロシージャ・コールには、oracle.jsp.dbutil.CursorBeanを使用します。接続には、事前定義のConnBeanオブジェクトが使用されます。

SQL操作は、ConnBeanオブジェクトのgetCursorBean()コールに指定するか、または後述のようにCursorBeanオブジェクトのcreate()execute()またはexecuteQuery()メソッドのいずれかをコールすることによって指定できます。

CursorBeanは、スクロール可能で更新可能なカーソル、バッチ更新、行のプリフェッチおよび問合せタイムアウト制限をサポートしています。

CursorBeanには、次のプロパティがあります。

必要に応じて、これらのプロパティを次のメソッドで設定し、Oracle JDBCの機能を有効にできます。

CursorBeanインスタンスをjsp:useBean文で定義した後に問合せを実行するには、CursorBeanメソッドを使用し、次の2つのいずれかの方法でカーソルを作成できます。カーソルを作成し、個別のステップで接続を指定するには、次のメソッドを使用します。

または、次のメソッドを使用してプロセスを単一のステップに組み込むこともできます。

ConnBeanオブジェクトの設定は、「データベース接続用ConnBean」を参照してください。

次のメソッドを使用して、問合せを指定および実行します(JDBCの単純なStatementオブジェクトがバックグラウンドで使用されます)。

結果セットをHTML表またはXML文字列としてフォーマットする場合は、executeQuery()のかわりに、次のいずれかのメソッドを使用します。

CursorBeanインスタンスをjsp:useBean操作で定義した後にUPDATE文、INSERT文またはDELETE文を実行するには、CursorBeanのメソッドを使用し、次の2つのいずれかの方法でカーソルを作成できます。次のメソッドを使用して、カーソルを作成(文のタイプを整数で、SQL文を文字列で指定)し、接続を指定します。

または、次のメソッドを使用してプロセスを単一のステップに組み込むこともできます。

ConnBeanオブジェクトの設定は、「データベース接続用ConnBean」を参照してください。

int型の入力には、Statementオブジェクト用のCursorBean.PLAIN_STMTPreparedStatementオブジェクト用のCursorBean.PREP_STMTまたはCallableStatementオブジェクト用のCursorBean.CALL_STMTのいずれかの定数を使用して、JDBC文のタイプを指定します。Stringへの入力は、SQL文を指定します。

次のメソッドを使用して、INSERT文、UPDATE文またはDELETE文を実行します。boolean戻り値は無視してもかまいません。

また、バッチ更新の場合は、次のメソッドを使用して影響を受けた行数を戻します。

さらに、CursorBeanは、コール可能文に対するregisterOutParameter()、プリコンパイルされたSQL文とコール可能文に対するsetXXX()、および結果セットとコール可能文に対するgetXXX()など、Oracle JDBCの機能をサポートします。

次のメソッドを使用して、データベース・カーソルをクローズします。

例: データ・ソースを利用したConnBeanとCursorBeanの使用

次のサンプルは、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>"); }
%>

データ・アクセス用SQLタグ

OC4Jには、データベースにアクセスするSQLコマンドを実行するために、JSPページで使用できる一連のタグがあります。次の各項では各タグについて説明します。

データ・アクセス・タグの概要

OC4Jには、SQL機能に関するカスタム・タグ・ライブラリが用意されています。次のタグで構成されます。

SQLタグを使用する場合は、次の要件に注意してください。

タグ・ライブラリ・ディスクリプタ・ファイル、taglibディレクティブ、予約済のタグ・ライブラリ・ディレクトリおよびuri値の内容などを含むJSPタグ・ライブラリの使用方法に関する一般情報は、『Oracle Containers for J2EE JavaServer Pages開発者ガイド』を参照してください。


注意

  • データ・アクセス・タグは、「データ・アクセスに関するJavaBeans」で説明されているBeanを使用します。一般的に、これらのBeanとタグは、適切なJDBCドライバ・クラスがあることを前提として、Oracle以外のデータベースで使用できます。ただし、後述されている機能の多くは、注意にあるようにOracle固有の機能です。

  • データ・アクセス・タグを使用するアプリケーションでは、dbSetParamタグを使用して、SQL文のテキストの全文ではなくパラメータ値のみを指定することを考慮してください。これによって、ユーザーが必要な値以外の追加のSQLを入力するSQLポイゾニングの可能性を回避できます。

 

データ・アクセス・タグの説明

次の各項では、データ・アクセス・タグの詳細な構文について説明し、データ・ソースでのdbOpenタグとdbQueryタグの使用例を紹介します。

SQL dbOpenタグ

dbOpenタグを使用し、dbQuerydbExecuteなどのタグを使用した後続のSQL操作のために、データベース接続をオープンします。オープンするには、データ・ソースの場所を指定(この場合、接続キャッシュがサポートされます)するか、ユーザー、パスワードおよびURLを個別に指定します。OC4Jでデータ・ソースを設定する方法の詳細は、「データ・ソースと接続プーリング用のデータ・アクセスのサポート」を参照してください。

実装には、oracle.jsp.dbutil.ConnBeanインスタンスを使用します。単純な接続で、接続のキャッシュを使用しない場合は、必要に応じて、stmtCacheSizepreFetchおよび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の開始タグと終了タグ間のタグ・ボディに挿入できます。


注意

dataSource属性を設定するか、userpasswordおよびURLの各属性を設定する必要があります。必要に応じて、データ・ソースを使用してURLを指定し、次にdbOpenタグのuser属性とpassword属性を個別に使用できます。

データ・ソースを接続のキャッシュに使用すると、最初のキャッシュの使用で、データ・ソースが初期化されます。dbOpenタグのuser属性とpassword属性を使用してユーザーとパスワードを指定すると、そのユーザーとパスワードに関するキャッシュが初期化されます。後続のキャッシュは、同じユーザーとパスワードに対して使用されます。 


属性

SQL dbCloseタグ

dbCloseタグを使用して、dbOpenタグに指定したオプションのconnIdパラメータに関連付けられている接続をクローズします。dbOpenタグでconnIdが使用されていない場合、接続は、dbOpen終了タグに達したときに自動的にクローズされます。この場合、dbCloseタグは不要です。

OC4J提供のJspScopeListenerユーティリティを使用すると、セッション・ベースのイベント処理で接続を自動的に閉じられることに注意してください。詳細は、「JspScopeListenerによるJSPのイベント処理」を参照してください。

構文

<sql:dbClose connId = "connection_id" 
           [ scope = "page" | "request" | "scope" | "application" ] />
属性

SQL dbQueryタグ

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>


重要

  • SELECT文をセミコロンで終了しないでください。構文エラーになります。

  • dbQueryタグは、現時点ではLOB列をサポートしません。

 

属性

SQL dbCloseQueryタグ

dbCloseQueryタグを使用して、dbQueryタグに指定したオプションのqueryIdパラメータに関連付けられているカーソルをクローズします。dbQueryタグでqueryIdが指定されていない場合、カーソルは、dbQuery終了タグに達したときに自動的にクローズされます。この場合、dbCloseQueryタグは不要です。

構文

<sql:dbCloseQuery queryId = "query_id" />
属性

SQL dbNextRowタグ

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" />

SQL dbExecuteタグ

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 > 


重要

  • DML文やDDL文をセミコロンで終了しないでください。構文エラーになります。

  • dbExecuteタグは、現時点ではLOB列をサポートしません。

 

属性

SQL dbSetParamタグ

このタグを使用すると、問合せにバインド(dbQueryタグを使用)またはその他のSQL操作にバインド(dbExecuteタグを使用)するパラメータ値を設定できます。


注意

データ・アクセス・タグを使用するアプリケーションでは、dbSetParamタグを使用して、SQL文のテキストの全文ではなくパラメータ値のみを指定することを考慮してください。これによって、ユーザーが必要な値以外の追加のSQLコードを入力する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 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>

SQL dbSetCookieタグ

このタグを使用すると、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" ] />
属性

<sql:dbSetCookie name="cId" value='<%=request.getParameter("id")%>'
                 maxAge='800000' />

例: データ・ソースを利用したdbOpenとdbQueryの使用

次のサンプルは、データ・ソースで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>

戻る 次へ
Oracle
Copyright © 2002, 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引