ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebLogic Server JDBCのプログラミング
11gリリース1 (10.3.3)
B60995-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストヘ移動
製品
目次へ移動
目次

前
 
次
 

5 JDBCドライバでのAPI拡張機能の使い方

次の項では、サード・パーティJDBCドライバの設定および使用方法について説明します。

JDBCインタフェースのAPI拡張機能の使い方

Oracleを含む一部のデータベース・ベンダーでは、DBMSを使用するデータベースのデータを操作するための独自のメソッドが追加されています。これらのメソッドは、標準のJDBCインタフェースを拡張したものです。以前のバージョンのWebLogic Serverでは、一部のベンダーの特定のJDBC拡張機能だけがサポートされていました。現在のリリースのWebLogic Serverは、ベンダーのJDBCドライバでパブリック・インタフェースとして公開されているすべての拡張機能メソッドをサポートします。

ARRAY、STRUCT、およびREFに対するOracle Thin Driverの拡張機能メソッドはパブリック・インタフェースとして公開されていませんが、WebLogic Serverではこれらの拡張機能メソッドもサポートしています。「Oracle Thin DriverでのAPI拡張機能の使い方」を参照してください。

一般に、WebLogic ServerはAPI拡張機能のサーバー側コードでの使用をサポートしています。API拡張機能をクライアント側コードで使用するには、オブジェクト型またはデータ型がシリアライズ可能でなければなりません。これに対する例外として、以下のオブジェクト型があります。

これらのオブジェクト型についてはWebLogic Serverでデシリアライゼーションが行われるので、クライアント側コードで使用できます。


注意:

クライアントとサーバーで異なるバージョンのWebLogic Serverを使用する場合は、相互運用性の制限があります。「様々なバージョンのWebLogic Serverクライアント/サーバー間におけるAPI拡張機能のサポート」を参照してください。

JDBCドライバで公開されている拡張機能メソッドを使用するには、アプリケーション・コードに次のような手順を組み込む必要があります。

次の項では、サンプル・コードで詳細を示します。特定のJDBCドライバの特定の拡張機能メソッドについては、JDBCドライバ・ベンダーのドキュメントを参照してください。

データ・ソースからの物理的な接続の取得


注意:

どうしても必要な場合以外は、物理的なJDBC接続へ直接アクセスすることはお薦めしません。

一般的には、WebLogic Severによって提供される汎用JDBC接続(ラップされた物理的な接続)に対する接続のキャストを行います。これにより、サーバー・インスタンスは接続プールに対する接続の管理、接続プール機能の有効化、およびアプリケーションに提供される接続の品質維持ができるようになります。場合によって、DBMSは物理的な接続(実際のベンダーのJDBC接続)の直接アクセスを必要とする、標準以外の追加のJDBC関連クラスを提供しています。接続プール内の物理的な接続に直接アクセスするには、getVendorConnectionを使用して接続をキャストする必要があります。

次の項では、物理的な接続の取得について説明します。

接続を開く

物理的なデータベース接続を取得するには、最初に接続プールから接続を取得してから、次のいずれかを実行します。

  • 物理的な接続を必要とするメソッド内で、物理的な接続を暗黙的に渡します(getVendorConnectionを使用)。

  • 接続をWLConnectionにキャストし、getVendorConnectionを呼び出します。

物理的なデータベース接続の直接アクセスは、常にベンダー固有の呼出しの場合に限定します。それ以外のすべての状況では、WebLogic Serverによって提供される汎用JDBC接続を使用します。ベンダー固有の呼出しに対する接続を開くサンプル・コードを次に示します。

例5-1 ベンダー固有の呼出しに対する接続を開くサンプル・コード

//Import this additional class and any vendor packages
//you may need.
import weblogic.jdbc.extensions.WLConnection
.
.
.
myJdbcMethod()
{ 
  // Connections from a connection pool should always be
  // method-level variables, never class or instance methods.
  Connection conn = null; 
   try { 
     ctx = new InitialContext(ht); 
     // Look up the data source on the JNDI tree and request 
     // a connection. 
     javax.sql.DataSource ds 
        = (javax.sql.DataSource) ctx.lookup ("myDataSource"); 
     // Always get a pooled connection in a try block where it is
     // used completely and is closed if necessary in the finally
     // block. 
     conn = ds.getConnection(); 
     // You can now cast the conn object to a WLConnection 
     // interface and then get the underlying physical connection. 
     java.sql.Connection vendorConn = 
       ((WLConnection)conn).getVendorConnection(); 
     // do not close vendorConn
     // You could also cast the vendorConn object to a vendor 
     // interface, such as: 
     // oracle.jdbc.OracleConnection vendorConn = (OracleConnection)
     // ((WLConnection)conn).getVendorConnection()
     // If you have a vendor-specific method that requires the 
     // physical connection, it is best not to obtain or retain 
     // the physical connection, but simply pass it implicitly 
     // where needed, eg:  //vendor.special.methodNeedingConnection(((WLConnection)conn)).getVendorConnection()); 

接続を閉じる

JDBCでの作業が完了したら、論理的な接続を閉じて、プールに戻す必要があります。物理的な接続を使い終わったら、次の操作を行います。

  • 接続から取得したすべてのオブジェクトを閉じます。

  • 物理的な接続は閉じません。物理的な接続はnullに設定します。

接続をどのようにクローズするかは、管理コンソールで「影響のある接続の削除を有効化」プロパティの値を設定して決定します。これらのオプションの詳細は、Oracle WebLogic Server管理コンソール・ヘルプ「JDBCデータ・ソース:構成:接続プール」ページまたは「Oracle WebLogic Server MBean Reference」JDBCConnectionPoolParamsBeanを参照してください。


注意:

[影響のある接続の削除を有効化]プロパティは、明示的にgetVendorConnectionを呼び出すアプリケーションに対してのみ適用されます。

例5-2 ベンダー固有の呼出しに対する接続を閉じるサンプル・コード

// As soon as you are finished with vendor-specific calls,  
    // nullify the reference to the connection. 
    // Do not keep it or close it. 
    // Never use the vendor connection for generic JDBC.
    // Use the logical (pooled) connection for standard JDBC. 
    vendorConn = null; 
    ... do all the JDBC needed for the whole method... 
    // close the logical (pooled) connection to return it to 
    // the connection pool, and nullify the reference. 
    conn.close(); 
    conn = null; 
 } 
 catch (Exception e) 
 { 
   // Handle the exception. 
 } 
 finally 
{ 
   // For safety, check whether the logical (pooled) connection
   // was closed. 
   // Always close the logical (pooled) connection as the  
   // first step in the finally block. 
   if (conn != null) try {conn.close();} catch (Exception ignore){} 
 } 
} 
「影響のある接続の削除を有効化」がTrueの場合

[影響のある接続の削除を有効化]がtrue (デフォルト値)のときに論理的な接続を閉じると、サーバー・インスタンスは基底の物理的接続を破棄して、それに取って代わる新しい接続を作成します。このアクションで、プールは次のユーザーに対して、そのユーザーがプール接続の唯一のユーザーであることを確実に保証できるようになります。この構成により、接続を閉じるための簡単で安全な方法がもたらされます。ただし、以下の理由により、パフォーマンス上の損失が生じます。

  • 物理的な接続は接続プールの新しいデータベース接続で置き換えられます。このため、アプリケーション・サーバーとデータベース・サーバーの両方でリソースが使用されます。

  • 元の接続のStatementキャッシュが閉じられて、新しい接続用に新しいキャッシュが開かれます。したがって、Statementキャッシュを使用する際のパフォーマンスの利点は失われます。

「影響のある接続の削除を有効化」がFalseの場合

[影響のある接続の削除を有効化]をfalseで使用するのは、公開されている物理的な接続が、論理的な接続を閉じた後、保持または再利用されることが絶対にないと確信している場合のみです。

[影響のある接続の削除を有効化]がfalseのときに論理的な接続を閉じると、サーバー・インスタンスは単に物理的な接続を、再利用のために接続プールに返します。この構成では、パフォーマンス上の損失は最小限に抑えられますが、サーバー・インスタンスは、接続の品質や、論理的な接続が閉じられた後の接続管理の効率を保証はしません。接続が接続プールに返される前に、その接続が他のアプリケーションによる再利用に適していることを確認する必要があります。

物理的な接続の使用に関する制限

接続プールの論理的な接続の代わりに物理的な接続を使用することはお薦めしません。ただし、たとえばSTRUCTの作成などに、物理的な接続を使用する必要がある場合は、以下の負担と制限を考慮してください。

  • 物理的な接続はサーバー側コードでのみ使用できます。

  • 物理的な接続を使用する場合、エラー処理や文のキャッシングなど、WebLogic Serverが提供する接続管理の利点がすべて失われます。

  • 物理的な接続は、それを必要とするベンダー固有のメソッドまたはクラスにのみ使用します。汎用JDBC (文やトランザクション呼出しの作成など)には物理的な接続を使用しないでください。

JDBCインタフェースのAPI拡張機能へのアクセス方法を示すサンプル・コード

以下のサンプル・コードでは、Oracle Thin Driverで利用できる拡張機能メソッドを使用して、JDBCのAPI拡張機能の使用方法を示します。使用するJDBCドライバで公開されているメソッドに合わせて、これらの例を修正することができます。

API拡張機能へアクセスするパッケージをインポートする

データ・ソースでの接続の作成に使用するJDBCドライバから、インタフェースをインポートします。この例ではOracle Thin Driverのインタフェースを使用します。

import java.sql.*;
import java.util.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import oracle.jdbc.*;
// Import driver interfaces. The driver must be the same driver
// used to create the database connection in the data source.

接続を取得する

JNDI、DataSource、およびデータ・ソース・オブジェクトを使用して、データベース接続を確立します。

// Get a valid DataSource object for a data source.
// Here we assume that getDataSource() takes 
// care of those details.
javax.sql.DataSource ds = getDataSource(args);
// get a java.sql.Connection object from the DataSource
java.sql.Connection conn = ds.getConnection();

接続をベンダーの接続としてキャストする

接続を取得したら、ベンダーの接続の形にキャストできます。この例ではOracle Thin DriverのOracleConnectionインタフェースを使用します。

orConn = (oracle.jdbc.OracleConnection)conn;
// This replaces the deprecated process of casting the connection
// to a weblogic.jdbc.vendor.oracle.OracleConnection. For example:
// orConn = (weblogic.jdbc.vendor.oracle.OracleConnection)conn;

API拡張機能を使用する

次のコードでは、Oracle Thin Driverで使用できるOracleの行プリフェッチ・メソッドの使い方を示します。

例5-3 API拡張機能を使用する

// Cast to OracleConnection and retrieve the 
// default row prefetch value for this connection.
int default_prefetch = 
   ((oracle.jdbc.OracleConnection)conn).getDefaultRowPrefetch();
// This replaces the deprecated process of casting the connection
// to a weblogic.jdbc.vendor.oracle.OracleConnection. For example:
// ((weblogic.jdbc.vendor.oracle.OracleConnection)conn).
//       getDefaultRowPrefetch();
System.out.println("Default row prefetch 
    is " + default_prefetch);
java.sql.Statement stmt = conn.createStatement();
// Cast to OracleStatement and set the row prefetch
// value for this statement. Note that this
// prefetch value applies to the connection between
// WebLogic Server and the database.
      ((oracle.jdbc.OracleStatement)stmt).setRowPrefetch(20);
   // This replaces the deprecated process of casting the
   // statement to a weblogic.jdbc.vendor.oracle.OracleStatement.
   // For example:
   // ((weblogic.jdbc.vendor.oracle.OracleStatement)stmt).
   //       setRowPrefetch(20);
      // Perform a normal sql query and process the results...
      String query = "select empno,ename from emp";
      java.sql.ResultSet rs = stmt.executeQuery(query);
      while(rs.next()) {
         java.math.BigDecimal empno = rs.getBigDecimal(1);
         String ename = rs.getString(2);
         System.out.println(empno + "\t" + ename);
      }
      rs.close();
      stmt.close();
      conn.close();
      conn = null;
    }

Oracle Thin DriverでのAPI拡張機能の使い方

Oracle Thin Driverのほとんどの拡張機能では、「JDBCインタフェースのAPI拡張機能の使い方」で説明したような標準的な方法を使用できます。ただし、Oracle Thin Driverでは、以下のクラスの拡張機能メソッドに対するパブリック・インタフェースを提供していません。

WebLogic Serverでは、これらのクラスの拡張機能メソッドにアクセスするために、独自のインタフェースを提供しています。

次の項では、これらの拡張機能のWebLogic Serverインタフェースを使用するためのサンプル・コードを示します。サポートされるメソッドのリストについては、「Oracle Thin Driver拡張機能インタフェースとサポートされるメソッドの表」を参照してください。詳細については、Oracleのドキュメントを参照してください。


注意:

このプロセスを使用すると、「Oracle Thin Driver拡張機能インタフェースとサポートされるメソッドの表」で示す拡張機能向けのWebLogic Serverインタフェースを使用できます。ただし、上記以外のインタフェースは非推奨になっており、WebLogic Serverの今後のリリースで削除される予定です。

Oracle Thin Driver拡張機能を使用する際の特別な考慮事項

JDBCインタフェースにOracle Thin Driver拡張機能を使用する場合、次の制限があります。

  • Oracle Thin Driver拡張機能は、サーバーと同じJVMのみを使用したサーバー側アプリケーションで、ARRAY、REF、およびSTRUCTの各オブジェクトに適用できます。リモート・クライアント・アプリケーションのARRAY、REF、STRUCTにOracle Thin Driver拡張機能は使用できません。

  • アプリケーションでARRAY、REF、STRUCTは作成できません。既存のARRAY、REF、STRUCTオブジェクトは、データベースからのみ検索できます。アプリケーションでこれらのオブジェクトを作成するには、標準外のOracle記述子オブジェクトを使用します。ただし、WebLogic Serverではサポートされていません。

  • クライアントとサーバーで異なるバージョンのWebLogic Serverを使用する場合は、相互運用性の制限があります。「様々なバージョンのWebLogic Serverクライアント/サーバー間におけるAPI拡張機能のサポート」を参照してください。

JDBCインタフェースのOracle Thin Driver拡張機能にアクセスするサンプル・コード

以下のサンプル・コードでは、パブリック・インタフェースとして利用できないOracle拡張機能に対するWebLogic Serverインタフェースにアクセスする方法を示します。次のようなインタフェースがあります。

WebLogic Serverと共にサーバー・サンプルをインストールするオプションを選択した場合は、JDBCサンプルの詳細なサンプル・コードを参照してください。JDBCサンプルは通常、WL_HOME\samples\server\src\examples\jdbcにあります。WL_HOMEはWebLogic Serverをインストールしたフォルダです。

ARRAYによるプログラミング

WebLogic Serverのサーバー側アプリケーションでは、結果セット、またはJava配列として呼出し可能ステートメントを使用することにより、Oracle Collection (SQL ARRAY)を実体化できます。

WebLogic ServerアプリケーションでARRAYを使用するには:

  1. 必要なクラスをインポートします。

  2. 接続を取得して、接続のための文を作成します。

  3. 結果セット、または呼出し可能ステートメントを使用してARRAYを取得します。

  4. ARRAYをjava.sql.Arrayまたはweblogic.jdbc.vendor.oracle.OracleArrayのいずれかとして使用します。

  5. 標準Javaメソッド(java.sql.Arrayとして使用)、またはOracle拡張機能メソッド(weblogic.jdbc.vendor.oracle.OracleArrayにキャスト)を使用して、データを操作します。

次の項では、これらのアクションの詳細について説明します。


注意:

ARRAYはサーバー側アプリケーションでのみ使用できます。リモート・クライアント・アプリケーションではARRAYは使用できません。

Oracle拡張機能へアクセスするパッケージをインポートする

この例で使用するWebLogicインタフェースをインポートします。OracleArrayインタフェースは、oracle.sql.ARRAYに相当し、WebLogic Serverでサポートされるメソッドを使用する場合、WebLogicインタフェースと同様に使用できます。

import java.sql.*;
import java.util.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import weblogic.jdbc.vendor.oracle.*;

接続を確立する

JNDIとDataSourceオブジェクトを使用して、データベース接続を確立します。

// Get a valid DataSource object.
// Here we assume that getDataSource() takes 
// care of those details.
javax.sql.DataSource ds = getDataSource(args);
// get a java.sql.Connection object from the DataSource
java.sql.Connection conn = ds.getConnection();

ARRAYを取得する

呼出し可能ステートメント、または結果セットにgetArray()メソッドを使用して、Java配列を取得できます。この配列をjava.sql.arrayとして使用することで標準java.sql.arrayメソッドを利用できます。またweblogic.jdbc.vendor.oracle.OracleArrayにキャストすることで、配列にOracle拡張機能メソッドを利用することもできます。

以下の例では、ARRAYを含む結果セットからjava.sql.arrayを取得する方法を示します。この例では、問合せにより、オブジェクト列(学生の成績を示すARRAY)を含む結果セットが返されます。

try {
  conn = getConnection(url);
  stmt = conn.createStatement();
  String sql = "select * from students";
//Get the result set
  rs = stmt.executeQuery(sql);
  while(rs.next()) {
    BigDecimal id = rs.getBigDecimal("student_id");
    String name   = rs.getString("name");
    log("ArraysDAO.getStudents() -- Id = "+id.toString()+", Student = "+name);
//Get the array from the result set
    Array scoreArray  = rs.getArray("test_scores");
    String[] scores = (String[])scoreArray.getArray();
    for (int i = 0; i < scores.length; i++) {
      log("   Test"+(i+1)+" = "+scores[i]);
    }
  }

データベースでARRAYを更新する

データベースにおけるARRAYを更新するには、次の手順に従います。

  1. 更新する配列がデータベースにない場合、PL/SQLを使用してデータベースに配列を作成します。

  2. 結果セット、または呼出し可能ステートメントを使用してARRAYを取得します。

  3. Javaアプリケーション内の配列をjava.sql.Arrayまたはweblogic.jdbc.vendor.oracle.OracleArrayとして扱います。

  4. プリペアド・ステートメントまたは呼出し可能ステートメントにsetArray()メソッドを使用して、データベース内の配列を更新します。例:

    String sqlUpdate = "UPDATE SCOTT." + tableName + " SET col1 = ?";
    conn  = ds.getConnection();
    pstmt = conn.prepareStatement(sqlUpdate);
    pstmt.setArray(1, array);
    pstmt.executeUpdate();
    

Oracle Array拡張機能メソッドを使用する

ARRAYに対してOracle Thin Driver拡張機能メソッドを利用するには、まずこの配列をweblogic.jdbc.vendor.oracle.OracleArrayにキャストします。キャストが済むとARRAYに対してOracle Thin Driver拡張メソッドを呼び出せます。例:

   oracle.sql.Datum[] oracleArray = null;
   oracleArray =       ((weblogic.jdbc.vendor.oracle.OracleArray)scoreArray).getOracleArray();
   String sqltype = null
   sqltype = oracleArray.getSQLTypeName()

STRUCTによるプログラミング

WebLogic Serverアプリケーションでは、Oracleデータベースからオブジェクトにアクセスしたり、オブジェクトを操作したりできます。Oracleデータベースからオブジェクトを検索したら、カスタムJavaオブジェクト、またはSTRUCT (java.sql.structあるいは weblogic.jdbc.vendor.oracle.OracleStruct)のいずれかとして、オブジェクトをキャストできます。STRUCTは、アプリケーション中のカスタム・クラスを置き換える構造化データを表す型制限の緩いデータ型です。JDBC APIにおけるSTRUCTインタフェースには、STRUCT中の属性値を操作するための様々なメソッドが組み込まれています。Oracleでは、いくつかの追加メソッドを使用して、STRUCTインタフェースを拡張しています。WebLogic Serverでは、すべての標準メソッドと大部分のOracle拡張機能が実装されています。


注意:

STRUCTを使用する場合、次の制限があります。
  • STRUCTは、Oracle専用としてサポートされるデータ型。アプリケーション中でSTRUCTを使用するには、Oracle Thin Driverを使用して(通常はデータ・ソースを介して)データベースとやり取りします。

  • STRUCTはサーバー側アプリケーションでのみ使用できます。クライアント・アプリケーションではSTRUCTは使用できません。


WebLogic ServerアプリケーションでSTRUCTを使用するには:

  1. 必要なクラスをインポートします(「Oracle拡張機能へアクセスするパッケージをインポートする」を参照)。

  2. 接続を取得します(「接続を確立する」を参照)。

  3. getObjectを使用してSTRUCTを取得します。

  4. STRUCTをSTRUCT (標準のメソッドを使用する場合はjava.sql.Struct、標準のメソッドとOracle拡張機能メソッドを使用する場合はweblogic.jdbc.vendor.oracle.OracleStruct)にキャストします。

  5. 標準メソッド、またはOracle Thin Driver拡張機能メソッドを使用して、データを操作します。

次の項では、ステップ3 - 5について詳しく説明します。

STRUCTを取得する

データベース・オブジェクトをSTRUCTとして取得するには、まず問合せを使用して結果セットを作成し、次にgetObjectメソッドを使用して、結果セットからSTRUCTを取得します。その後でSTRUCTをjava.sql.Structにキャストすることにより、標準Javaメソッドを使用できるようになります。例:

conn = ds.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from people");
struct = (java.sql.Struct)(rs.getObject(2)); 
Object[] attrs = ((java.sql.Struct)struct).getAttributes();

WebLogic Serverでは、STRUCTに対応するすべてのJDBC APIメソッドがサポートされます。

  • getAttributes()

  • getAttributes(java.util.Dictionary map)

  • getSQLTypeName()

したがって、STRUCTをweblogic.jdbc.vendor.oracle.OracleStructにキャストすると、標準メソッドと拡張機能メソッドの両方を使用できるようになります。

OracleStruct拡張機能メソッドを使用する

STRUCTにOracle Thin Driver拡張機能メソッドを使用する場合、java.sql.Struct (または元のgetObjectの結果)をweblogic.jdbc.vendor.oracle.OracleStructにキャストする必要があります。例:

java.sql.Struct struct =
   (weblogic.jdbc.vendor.oracle.OracleStruct)(rs.getObject(2));

WebLogic Serverでは次のOracle拡張機能がサポートされます。

  • getDescriptor()

  • getOracleAttributes()

  • getAutoBuffering()

  • setAutoBuffering(boolean)

STRUCT属性を取得する

STRUCTの個々の属性値を取得するには、getAttributes()およびgetAttributes(java.util.Dictionary map)の標準JDBC APIメソッド、またはOracle拡張機能メソッドgetOracleAttributes()を使用できます。

標準メソッドを使用するには、まず結果セットを作成し、この結果セットからSTRUCTを取得した後でgetAttributes()メソッドを使用します。このメソッドにより、順序の付いた属性の配列が返されます。アプリケーションのオブジェクト(Java言語タイプなど)にSTRUCT (データベースのオブジェクト)の属性を割り当てることができます。この後、属性を個別に操作できるようになります。例:

conn = ds.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from people");
//The third column uses an object data type.
//Use getObject() to assign the object to an array of values.
struct = (java.sql.Struct)(rs.getObject(2));
Object[] attrs = ((java.sql.Struct)struct).getAttributes();
String address = attrs[1]; 

上の例で、people表の第3列ではオブジェクト・データ型を使用しています。この例では、値の配列を含むJavaオブジェクトにgetObjectメソッドの結果を割り当て、必要に応じて配列中の個別の値を使用する方法を示しています。

また、getAttributes(java.util.Dictionary map)メソッドを使用しても、STRUCTから属性を取得できます。このメソッドを使用する場合は、Java言語データ型にOracleオブジェクトのデータ型をマップするためのハッシュ表を用意する必要があります。例:

java.util.Hashtable map = new java.util.Hashtable();
map.put("NUMBER", Class.forName("java.lang.Integer"));
map.put("VARCHAR", Class.forName("java.lang.String"));
Object[] attrs = ((java.sql.Struct)struct).getAttributes(map);
String address = attrs[1];

また、Oracle拡張機能メソッドgetOracleAttributes()を使用して、STRUCTの属性を取得することもできます。まず、STRUCTをweblogic.jdbc.vendor.oracle.OracleStructにキャストする必要があります。このメソッドにより、oracle.sql.Datumオブジェクトのデータ配列が返されます。例:

oracle.sql.Datum[] attrs =
   ((weblogic.jdbc.vendor.oracle.OracleStruct)struct).getOracleAttributes();
        oracle.sql.STRUCT address = (oracle.sql.STRUCT) attrs[1];
        Object address_attrs[] = address.getAttributes();

上の例では、STRUCTがネスト構造になっています。つまり、ここで返されるデータ配列には、別のSTRUCTが入れ子の構造で組み込まれています。

STRUCTによってデータベース・オブジェクトを更新する

STRUCTを使用してデータベースのオブジェクトを更新するには、プリペアド・ステートメントにあるsetObjectメソッドを使用します。例:

conn  = ds.getConnection();
stmt = conn.createStatement();
ps = conn.prepareStatement ("UPDATE SCHEMA.people SET EMPLNAME = ?,
EMPID = ? where EMPID = 101");
ps.setString (1, "Smith");
ps.setObject (2, struct);
ps.executeUpdate();

WebLogic Serverでは、setObjectメソッドの3つのバージョンがすべてサポートされます。

データベース・オブジェクトを作成する

STRUCTは通常Javaアプリケーション中で、データベース・オブジェクトにマップするカスタムJavaクラスの代わりに、データベース・オブジェクトを実体化する場合に使用します。WebLogic Serverアプリケーションでは、データベースに転送するSTRUCTは作成できません。一方で、アプリケーションから検索や操作が実行できるようなデータベース・オブジェクトを作成する文は使用できます。例:

conn = ds.getConnection();
stmt = conn.createStatement();
cmd = "create type ob as object (ob1 int, ob2 int)"
stmt.execute(cmd);
cmd = "create table t1 of type ob";
stmt.execute(cmd);
cmd = "insert into t1 values (5, 5)"
stmt.execute(cmd);

注意:

アプリケーションでSTRUCTは作成できません。データベースから既存のオブジェクトを検索して、これをSTRUCTにキャストすることはできます。アプリケーションでSTRUCTオブジェクトを作成するには、標準外のOracle STRUCT記述子オブジェクトを使用します。ただし、WebLogic Serverではサポートされません。

STRUCT属性を自動バッファリングする

STRUCTを使用するWebLogic Serverアプリケーションのパフォーマンスを向上させるために、setAutoBuffering(boolean)メソッドで自動バッファリング機能を切り換えることができます。自動バッファリングをtrueに設定すると、weblogic.jdbc.vendor.oracle.OracleStructオブジェクトに、STRUCTオブジェクトにあるすべての属性のローカル・コピーが変換済みのフォーム(すなわちSQLからJava言語オブジェクトに実体化した形式)で保持されます。アプリケーションが、STRUCTに再びアクセスした時点で、データを再度変換する必要はありません。


注意:

変換した属性をバッファリングすると、アプリケーションで使用するメモリー量が過度に増大することがあります。自動バッファリングの有効/無効を切り換えるときは、可能メモリー使用量についても考慮してください。

以下の例は、自動バッファリングをアクティブにする方法を示します。

 ((weblogic.jdbc.vendor.oracle.OracleStruct)struct).setAutoBuffering(true);

また、getAutoBuffering()メソッドを使用して、自動バッファリング・モードを判断することもできます。

REFによるプログラミング

REFは、行オブジェクトに対する論理ポインタです。REFを検索すると、実際には別の表にある値を指すポインタが返されます。REFのターゲットは、オブジェクト表の行でなければなりません。REFを使用して、これが参照するオブジェクトを検証したり、更新したりできます。またREFを変更することにより、同じオブジェクト・タイプの別のオブジェクトを指示したり、null値を割り当てたりすることができます。


注意:

REFを使用する場合、次の制限があります。
  • REFは、Oracleデータベースでのみ使用できます。アプリケーション中でREFを使用するには、Oracle Thin Driverを使用して(通常はデータ・ソースを介して)データベースとやり取りします。

  • REFはサーバー側アプリケーションでのみ使用できます。


WebLogic ServerアプリケーションでREFを使用するには、次の手順に従います。

  1. 必要なクラスをインポートします(「Oracle拡張機能へアクセスするパッケージをインポートする」を参照)。

  2. データベース接続を取得します(「接続を確立する」を参照)。

  3. 結果セット、または呼出し可能ステートメントを使用してREFを取得します。

  4. 結果をSTRUCT、またはJavaオブジェクトにキャストします。これにより、STRUCTメソッド、またはJavaオブジェクトのメソッドを使用して、データを操作できるようになります。

また、データベースでREF作成したり、更新したりできます。

ステップ3と4について次の項で詳しく説明します。

REFを取得する

アプリケーションでREFを取得するには、まず問合せを使用して結果セットを作成し、次にgetRefメソッドを使用して、結果セットからREFを取得します。続いてREFをjava.sql.Refにキャストすることにより、組込みJavaメソッドを使用できます。例:

conn = ds.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT ref (s) FROM t1 s where s.ob1=5");
rs.next();
//Cast as a java.sql.Ref and get REF
ref = (java.sql.Ref) rs.getRef(1);

なお、上の例のWHERE句では、ドット表記法を使用して、参照するオブジェクトの属性を指定しています。

REFをjava.sql.Refにキャストした後は、Java APIメソッドgetBaseTypeNameを使用できます(これはREFに対応した唯一のJDBC 2.0標準メソッドです)。

REFを取得すると、実際には別のオブジェクト表にある値を指すポインタが返されます。REF値の取得や操作を行うには、Oracle拡張機能を使用します。この拡張機能は、sql.java.Refweblogic.jdbc.vendor.oracle.OracleRefにキャストする場合に限り使用できます。

OracleRef拡張機能メソッドを使用する

REFにOracle Thin Driver拡張機能メソッドを使用するには、REFをOracle REFにキャストします。例:

   oracle.sql.StructDescriptor desc =       ((weblogic.jdbc.vendor.oracle.OracleRef)ref).getDescriptor();

WebLogic Serverでは次のOracle Thin Driver拡張機能がサポートされます。

  • getDescriptor()

  • getSTRUCT()

  • getValue()

  • getValue(dictionary)

  • setValue(object)

値を取得する

Oracle Thin Driverでは、2つのバージョンのgetValue()メソッドが提供されています。パラメータを取らないメソッドと、戻り値の型をマップするハッシュ表を必要とするメソッドの2種類です。いずれかのgetValue()メソッドを使用してREFの属性値を取得すると、STRUCTまたはJavaオブジェクトのいずれかの形式で結果が返されます。

パラメータを取らないgetValue()メソッドを使用する方法を以下の例で示します。この例では、REFがoracle.sql.STRUCT型にキャストされます。getAttributes()メソッドの説明で示したとおり、STRUCTメソッド群を使用して値を操作できます。

oracle.sql.STRUCT student1 = 
   (oracle.sql.STRUCT)((weblogic.jdbc.vendor.oracle.OracleRef)ref).getValue ();
Object attributes[] = student1.getAttributes();

また、getValue(dictionary)メソッドを使用して、REFの値を取得できます。またREFの属性ごとにデータ型をJava言語データ型にマップするためのハッシュ表を用意する必要があります。例:

java.util.Hashtable map = new java.util.Hashtable();
map.put("VARCHAR", Class.forName("java.lang.String"));
map.put("NUMBER", Class.forName("java.lang.Integer"));
oracle.sql.STRUCT result = (oracle.sql.STRUCT)
   ((weblogic.jdbc.vendor.oracle.OracleRef)ref).getValue (map);

REF値を更新する

REFの更新では、次のような操作が行えます。

  • setValue(object)メソッドを使用して、基底の表の値を変更する

  • プリペアド・ステートメントまたは呼出し可能ステートメントを使用してREFが指示する位置を変更する

  • REFの値をnullに設定する

setValue(object)メソッドを使用してREF値を更新する場合は、REFの新しい値を持つオブジェクトを作成してから、そのオブジェクトをsetValueメソッドのパラメータとして渡します。例:

STUDENT s1 = new STUDENT();
s1.setName("Terry Green");
s1.setAge(20);
((weblogic.jdbc.vendor.oracle.OracleRef)ref).setValue(s1);

REFの値をsetValue(object)メソッドで更新すると、実際にはREFが示す表の値が更新されます。

プリペアド・ステートメントを使用してREFが指示する位置を更新するには、次の基本手順に従います。

  1. 新しい位置を指示するREFを取得します。このREFを使用して、別のREFの値を置き換えます。

  2. SQLコマンドの文字列を作成して、既存のREFの位置を、別のREFの値で置き換えます。

  3. プリペアド・ステートメントを作成、および実行します。

例:

try {
conn = ds.getConnection();
stmt = conn.createStatement();
//Get the REF.
rs = stmt.executeQuery("SELECT ref (s) FROM t1 s where s.ob1=5");
rs.next();
ref = (java.sql.Ref) rs.getRef(1); //cast the REF as a java.sql.Ref
}
//Create and execute the prepared statement.
String sqlUpdate = "update t3 s2 set col = ? where s2.col.ob1=20";
pstmt = conn.prepareStatement(sqlUpdate);
pstmt.setRef(1, ref);
pstmt.executeUpdate();

呼出し可能ステートメントを使用して、REFが指示する位置を更新する場合は、まずストアド・プロシージャを作成し、いずれかのINパラメータを設定して、OUTパラメータを登録した後、文を実行します。ストアド・プロシージャでは、実際の位置を指示するREF値が更新されます。例:

conn = ds.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT ref (s) FROM t1 s where s.ob1=5");
rs.next();
ref1 = (java.sql.Ref) rs.getRef(1);
// Prepare the stored procedure
sql = "{call SP1 (?, ?)}";
cstmt = conn.prepareCall(sql);
// Set IN and register OUT params
cstmt.setRef(1, ref1);
cstmt.registerOutParameter(2, getRefType(), "USER.OB");
// Execute
cstmt.execute();

データベースでREFを作成する

JDBCアプリケーションにREFオブジェクトは作成できません。単に、データベースから既存のREFオブジェクトが検索されるだけです。ただし、文またはプリペアド・ステートメントを使用して、データベースにREFを作成できます。例:

conn = ds.getConnection();
stmt = conn.createStatement();
cmd = "create type ob as object (ob1 int, ob2 int)"
stmt.execute(cmd);
cmd = "create table t1 of type ob";
stmt.execute(cmd);
cmd = "insert into t1 values (5, 5)"
stmt.execute(cmd);
cmd = "create table t2 (col ref ob)";
stmt.execute(cmd);
cmd = "insert into t2 select ref(p) from t1 where p.ob1=5";
stmt.execute(cmd);

上の例では、オブジェクト型(ob)、このオブジェクト型の表(t1)、obオブジェクトのインスタンスを示すREF列のある表(t2)が作成され、REFがREF列に挿入されます。REFは、t1の行を指します(最初の列の値は5)。

BLOBとCLOBを使用したプログラミング

この項では、OracleBlobインタフェースへのアクセス方法を示すサンプル・コードについて説明します。WebLogic Serverでサポートされるメソッドを使用している場合、この例で示す構文は、OracleBlobインタフェースで使用できます。「Oracle Thin Driverの拡張機能インタフェースとサポートされるメソッドの表」を参照してください。


注意:

BLOBおよびCLOB (「LOB」と呼ばれる)を使用する場合、トランザクションの境界を考慮する必要があります。たとえば、すべての読取り/書込みをトランザクション内の特定のLOBに転送します。詳細については、Oracle Webサイト(http://www.oracle.com)にあるOracleのドキュメントの「LOB Locators and Transaction Boundaries」を参照してください。

DBMSからBLOBロケータを選択する問合せを実行する

BLOBロケータまたはハンドルは、Oracle Thin Driver Blobへの参照です。

String selectBlob = "select blobCol from myTable where blobKey = 666"

WebLogic Server java.sqlオブジェクトを宣言する

次のコードでは、Connectionがすでに確立されていることを前提としています。

ResultSet rs = null; 
Statement myStatement = null; 
java.sql.Blob myRegularBlob = null; 
java.io.OutputStream os = null;

SQL例外ブロックを開始する

このtry/catchブロックでは、BLOBロケータを取得して、Oracle Blob拡張機能にアクセスします。

try { 
     // get our BLOB locator.. 
     myStatement = myConnect.createStatement(); 
     rs = myStatement.executeQuery(selectBlob);
     while (rs.next()) { 
       myRegularBlob = rs.getBlob("blobCol");
}
     // Access the underlying Oracle extension functionality for
     // writing. Cast to the OracleThinBlob interface to access
     // the Oracle method.
     os = ((OracleThinBlob)myRegularBlob).getBinaryOutputStream();
     ...
     } catch (SQLException sqe) {
       System.out.println("ERROR(general SQE): " +
         sqe.getMessage()); 
     }

Oracle.ThinBlobインタフェースにキャストしたら、Oracleがサポートするメソッドにアクセスできます。

プリペアド・ステートメントを使用したCLOB値の更新

プリペアド・ステートメントを使用してCLOBを更新し、新しい値が以前の値より短い場合、CLOBには更新中に明示的に置換されなかった文字が保持されます。たとえば、CLOBの現在の値がabcdefghijの場合に、プリペアド・ステートメントを使用してzxywでCLOBを更新すると、CLOBの値はzxywefghijになります。プリペアド・ステートメントで更新された値を修正するには、dbms_lob.trimプロシージャを使用して、更新後に残った余分な文字を削除します。dbms_lob.trimプロシージャの詳細については、Oracleのドキュメントを参照してください。

Oracle仮想プライベート・データベースを使用したプログラミング

Oracle仮想プライベート・データベース(Oracle Virtual Private Database: VPD)は、サーバーによって強制されるアプリケーション定義のファイン・グレイン・アクセス制御と、Oracleデータベース・サーバーのセキュアなアプリケーション・コンテキストを組み合わせたものです。WebLogic ServerアプリケーションでVPDを使用するには、以下の手順に従います。

  1. WebLogic Server構成でOracle Thinドライバを使用するJDBCデータ・ソースを作成します。Oracle WebLogic Server管理コンソール・ヘルプの第2章「アプリケーションでのWebLogic JDBCの使用方法」またはJDBCデータ・ソースの作成を参照してください。


    注意:

    XA対応のJDBCドライバを使用している場合、KeepXAConnTillTxComplete=trueに設定する必要があります。Oracle WebLogic Server管理コンソール・ヘルプJDBCデータ・ソース: 構成: 接続プールを参照してください。

  2. アプリケーションで次のコードを実行します。

    import weblogic.jdbc.extensions.WLConnection
    // get a connection from a WLS JDBC data source
    Connection conn = ds.getConnection();
    // Get the underlying vendor connection object
    oracle.jdbc.OracleConnection orConn = (oracle.jdbc.OracleConnection)
    (((WLConnection)conn).getVendorConnection());
    // Set CLIENT_IDENTIFIER (which will be accessible from 
    // USERENV naming context on the database server side)
    orConn.setClientIdentifier(clientId);
    /* perform application specific work, preferably using conn instead of orConn */
    // clean up connection before returning to WLS JDBC data source
    orConn.clearClientIdentifier(clientId);
    // As soon as you are finished with vendor-specific calls,  
    // nullify the reference to the physical connection. 
    orConn = null; 
    // close the pooled connection
    conn.close();
    

    注意:

    このコードでは、プールされた(論理的な)接続から得た基底の物理的な接続を使用します。

WebLogic ServerでのOracle VPDの使用

WebLogic Serverでは、oracle.jdbc.OracleConnection.setClientIdentitfierメソッドとoracle.jdbc.OracleConnection.clearClientIndentifierメソッドがサポートされています。これらを使用すると、プールされた接続から基底の物理的接続を使用せずに済みます。WebLogic ServerアプリケーションでVPDを使用するには、以下の手順に従います。

import weblogic.jdbc.vendor.oracle.OracleConnection;
// get a connection from a WLS JDBC data source
Connection conn = ds.getConnection();
// cast to the Oracle extension and set CLIENT_IDENTIFIER
// (which will be accessible from USERENV naming context on
//  the database server side)
 ((weblogic.jdbc.vendor.oracle.OracleConnection)conn).setClientIdentifier(clientId);
/* perform application specific work */
// clean up connection before returning to WLS JDBC data source
((OracleConnection)conn).clearClientIdentifier(clientId);
// close the connection
conn.close();

Oracle Thin Driverでのバッチ処理の使用

特定の状況下で、Oracle Thin Driverはバッチ・サイズに到達しない間、DBMSに更新を送信せず、文が閉じられるまで待機する場合があります。

WebLogic Serverは、プリペアド・ステートメントが閉じられる際、その文を閉じずに標準のJDBC状態に戻してから、次に必要になった場合に再配信されるよう、接続のキャッシュに戻します。

すべての更新が確実に配信されるようにするには、文または接続を閉じる前に、文を最後に使用した後でsendBatch()を明示的に呼び出す必要があります。

様々なバージョンのWebLogic Serverクライアント/サーバー間におけるAPI拡張機能のサポート

WebLogic ServerでのベンダーのJDBC拡張機能のサポート方法はWebLogic Server 8.1で変更されました。その影響で、様々なバージョンのクライアント/サーバー間の相互運用性が変更されています。

WebLogic Server 8.1以降のクライアントがWebLogic Server 7.0以前のサーバーと対話する場合、Oracle拡張機能はサポートされません。クライアント・アプリケーションでJDBCオブジェクトをOracle拡張機能インタフェースにキャストしようとすると、ClassCastExceptionを受け取ります。ただし、WebLogic Server 7.0以前のクライアントがWebLogic Server 8.1以降のサーバーと対話する場合、Oracle拡張機能はサポートされます。

これは、以下のOracle拡張機能インタフェースに対して適用されます。

Oracle Thin Driverの拡張機能インタフェースとサポートされるメソッドの表

以前のリリースのWebLogic Serverでは、以下の表に示すJDBC拡張機能のみがサポートされていました。現在のリリースのWebLogic Serverは、ベンダーのJDBCドライバでパブリック・インタフェースとして公開されているほとんどの拡張機能メソッドをサポートします。API拡張機能の使用手順については、「JDBCインタフェースのAPI拡張機能の使い方」を参照してください。API拡張機能をサポートするための新しい内部メカニズムは以前の実装に依存していないため、一部のインタフェースは不要になって非推奨となりました。これらのインタフェースはWebLogic Serverの今後のリリースで削除される予定です。表5-1を参照してください。表に示された代わりのインタフェースを使用することをお薦めします。

表5-1 Oracle JDBC拡張機能の非推奨になったインタフェース

非推奨になったインタフェース(WebLogic Server 7.0以前でサポート) 代わりに使用するOracleのインタフェース(WebLogic Server 8.1以降でサポート)
weblogic.jdbc.vendor.oracle.
OracleConnection
oracle.jdbc.OracleConnection
weblogic.jdbc.vendor.oracle.
OracleStatement  
oracle.jdbc.OracleStatement
weblogic.jdbc.vendor.oracle.
OracleCallableStatement 
oracle.jdbc.OracleCallableStatement
weblogic.jdbc.vendor.oracle.
OraclePreparedStatement 
oracle.jdbc.OraclePreparedStatement
weblogic.jdbc.vendor.oracle.
OracleResultSet 
oracle.jdbc.OracleResultSet

Oracle Thin Driverには、これらの拡張機能メソッドにアクセスするインタフェースが含まれていないため、ここにリストしたインタフェースはまだ有効です。

Oracleインタフェース

weblogic.jdbc.vendor.oracle.OracleArray
weblogic.jdbc.vendor.oracle.OracleRef
weblogic.jdbc.vendor.oracle.OracleStruct
weblogic.jdbc.vendor.oracle.OracleThinClob
weblogic.jdbc.vendor.oracle.OracleThinBlob

Oracleインタフェースを以下の表に示します。また、標準JDBC (java.sql.*)インタフェースを拡張するためにOracle Thin Driver (またはこれらのメソッドをサポートする他のドライバ)で使用するメソッドのうち、サポートされているものについても示します。

表5-2 OracleConnectionインタフェース

拡張 メソッド・シグネチャ

OracleConnection

拡張

java.sql.Connection

(このインタフェースは非推奨表5-1を参照)

void clearClientIdentifier(String s) 
   throws java.sql.SQLException;

boolean getAutoClose() 
   throws java.sql.SQLException;

String getDatabaseProductVersion()
   throws java.sql.SQLException;

String getProtocolType() throws
   java.sql.SQLException;

String getURL() throws java.sql.SQLException;

String getUserName()
   throws java.sql.SQLException;

boolean getBigEndian() 
   throws java.sql.SQLException;

boolean getDefaultAutoRefetch() throws
   java.sql.SQLException;

boolean getIncludeSynonyms()
   throws java.sql.SQLException;

boolean getRemarksReporting()
   throws java.sql.SQLException;

boolean getReportRemarks() 
   throws java.sql.SQLException;

OracleConnection

拡張

java.sql.Connection

(続き)

(このインタフェースは非推奨表5-1を参照)

boolean getRestrictGetTables()
   throws java.sql.SQLException;

boolean getUsingXAFlag()
   throws java.sql.SQLException;

boolean getXAErrorFlag() 
   throws java.sql.SQLException;

boolean isCompatibleTo816()
   throws java.sql.SQLException;
   (Deprecated)

byte[] getFDO(boolean b) 
   throws java.sql.SQLException;

int getDefaultExecuteBatch() throws 
   java.sql.SQLException;

int getDefaultRowPrefetch() 
   throws java.sql.SQLException;

int getStmtCacheSize() 
   throws java.sql.SQLException;

java.util.Properties getDBAccessProperties()
   throws java.sql.SQLException;

short getDbCsId() throws java.sql.SQLException;
short getJdbcCsId() throws java.sql.SQLException;
short getStructAttrCsId() 
   throws java.sql.SQLException;
short getVersionNumber() 
   throws java.sql.SQLException;

void archive(int i, int j, String s) 
   throws java.sql.SQLException;

OracleConnection

拡張

java.sql.Connection

(続き)

(このインタフェースは非推奨表5-1を参照)

void close_statements() 
   throws java.sql.SQLException;

void initUserName() throws java.sql.SQLException;

void logicalClose() throws java.sql.SQLException;

void needLine() throws java.sql.SQLException;

void printState() throws java.sql.SQLException;

void registerSQLType(String s, String t) 
   throws java.sql.SQLException;

void releaseLine() throws java.sql.SQLException;  

void removeAllDescriptor() 
   throws java.sql.SQLException;

void removeDescriptor(String s) 
   throws java.sql.SQLException;

void setAutoClose(boolean on) throws
   java.sql.SQLException;

void setClientIdentifier(String s) 
   throws java.sql.SQLException;

void clearClientIdentifier(String s) throws java.sql.SQLException;

void setDefaultAutoRefetch(boolean b)
   throws java.sql.SQLException;

void setDefaultExecuteBatch(int i) 
   throws java.sql.SQLException;

void setDefaultRowPrefetch(int i) 
   throws java.sql.SQLException;

void setFDO(byte[] b) 
   throws java.sql.SQLException;

void setIncludeSynonyms(boolean b) 
   throws java.sql.SQLException;

OracleConnection

拡張

java.sql.Connection

(続き)

(このインタフェースは非推奨表5-1を参照)

void setPhysicalStatus(boolean b) 
   throws java.sql.SQLException;

void setRemarksReporting(boolean b) 
   throws java.sql.SQLException;

void setRestrictGetTables(boolean b) 
   throws java.sql.SQLException;

void setStmtCacheSize(int i) 
   throws java.sql.SQLException;

void setStmtCacheSize(int i, boolean b) 
   throws java.sql.SQLException;

void setUsingXAFlag(boolean b) 
   throws java.sql.SQLException;

void setXAErrorFlag(boolean b) 
   throws java.sql.SQLException;

void shutdown(int i) 
   throws java.sql.SQLException;

void startup(String s, int i)
       throws java.sql.SQLException;

表5-3 OracleStatementインタフェース

拡張 メソッド・シグネチャ

OracleConnection

拡張

java.sql.Connection

(このインタフェースは非推奨表5-1を参照)

String getOriginalSql() 
   throws java.sql.SQLException;

String getRevisedSql() 
   throws java.sql.SQLException;
   (Deprecated in Oracle 8.1.7, removed in Oracle 9i.)

boolean getAutoRefetch() 
   throws java.sql.SQLException;

boolean is_value_null(boolean b, int i) 
   throws java.sql.SQLException;

byte getSqlKind() 
   throws java.sql.SQLException;

int creationState() 
   throws java.sql.SQLException;

int getAutoRollback() 
   throws java.sql.SQLException;
   (Deprecated)

int getRowPrefetch() 
   throws java.sql.SQLException;

int getWaitOption() 
   throws java.sql.SQLException;
   (Deprecated)

int sendBatch() 
   throws java.sql.SQLException;

OracleConnection

拡張

java.sql.Connection

(このインタフェースは非推奨表5-1を参照)

void clearDefines() 
   throws java.sql.SQLException;

void defineColumnType(int i, int j) 
   throws java.sql.SQLException;

void defineColumnType(int i, int j, String s)
   throws java.sql.SQLException;

void defineColumnType(int i, int j, int k) 
   throws java.sql.SQLException;

void describe() 
   throws java.sql.SQLException;

void setAutoRefetch(boolean b) 
   throws java.sql.SQLException;

void setAutoRollback(int i) 
   throws java.sql.SQLException;
   (Deprecated)

void setRowPrefetch(int i) 
   throws java.sql.SQLException;

void setWaitOption(int i) 
   throws java.sql.SQLException;
   (Deprecated)

表5-4 OracleResultSetインタフェース

拡張 メソッド・シグネチャ

OracleResultSet

拡張

java.sql.ResultSet

(このインタフェースは非推奨表5-1を参照)

boolean getAutoRefetch()
   throws java.sql.SQLException;

int getFirstUserColumnIndex() 
   throws java.sql.SQLException;

void closeStatementOnClose() 
   throws java.sql.SQLException;

void setAutoRefetch(boolean b) 
   throws java.sql.SQLException;

java.sql.ResultSet getCursor(int n) 
   throws java.sql.SQLException;

java.sql.ResultSet getCURSOR(String s) 
   throws java.sql.SQLException;

表5-5 OracleCallableStatementインタフェース

拡張 メソッド・シグネチャ

OracleCallableStatement

拡張

java.sql.CallableStatement

(このインタフェースは非推奨表5-1を参照)

void clearParameters() 
   throws java.sql.SQLException;

void registerIndexTableOutParameter(int i, 
      int j, int k, int l) 
   throws java.sql.SQLException;

void registerOutParameter
   (int i, int j, int k, int l) 
   throws java.sql.SQLException;

java.sql.ResultSet getCursor(int i) 
   throws java.sql.SQLException;

java.io.InputStream getAsciiStream(int i)
   throws java.sql.SQLException;

java.io.InputStream getBinaryStream(int i)
   throws java.sql.SQLException;

java.io.InputStream getUnicodeStream(int i)
   throws java.sql.SQLException;

表5-6 OraclePreparedStatementインタフェース

拡張 メソッド・シグネチャ

OraclePreparedStatement

拡張

OracleStatementおよびjava.sql.PreparedStatement

(このインタフェースは非推奨表5-1を参照)

int getExecuteBatch() 
   throws java.sql.SQLException;

void defineParameterType(int i, int j, int k) 
   throws java.sql.SQLException;

void setDisableStmtCaching(boolean b) 
   throws java.sql.SQLException;

void setExecuteBatch(int i) 
   throws java.sql.SQLException;

void setFixedCHAR(int i, String s) 
   throws java.sql.SQLException;

void setInternalBytes(int i, byte[] b, int j)
   throws java.sql.SQLException;

表5-7 OracleArrayインタフェース

拡張 メソッド・シグネチャ

OracleArray

拡張

java.sql.Array

public ArrayDescriptor getDescriptor() 
   throws java.sql.SQLException;

public Datum[] getOracleArray() 
   throws SQLException;

public Datum[] getOracleArray(long l, int i) 
   throws SQLException;

public String getSQLTypeName()
   throws java.sql.SQLException;

public int length()
   throws java.sql.SQLException;

public double[] getDoubleArray()
   throws java.sql.SQLException;

public double[] getDoubleArray(long l, int i)
   throws java.sql.SQLException;

public float[] getFloatArray()
   throws java.sql.SQLException;

public float[] getFloatArray(long l, int i)
   throws java.sql.SQLException;

public int[] getIntArray()
   throws java.sql.SQLException;

public int[] getIntArray(long l, int i)
   throws java.sql.SQLException;

public long[] getLongArray()
   throws java.sql.SQLException;

public long[] getLongArray(long l, int i)
   throws java.sql.SQLException;

OracleArray

拡張

java.sql.Array

(続き)

public short[] getShortArray()
   throws java.sql.SQLException;

public short[] getShortArray(long l, int i)
   throws java.sql.SQLException;

public void setAutoBuffering(boolean flag)
   throws java.sql.SQLException;

public void setAutoIndexing(boolean flag)
   throws java.sql.SQLException;

public boolean getAutoBuffering()
   throws java.sql.SQLException;

public boolean getAutoIndexing()
   throws java.sql.SQLException;

public void setAutoIndexing(boolean flag, int i)
   throws java.sql.SQLException;

表5-8 OracleStructインタフェース

拡張 メソッド・シグネチャ

OracleStruct

拡張

java.sql.Struct

public Object[] getAttributes() 
   throws java.sql.SQLException;

public Object[] getAttributes(java.util.Dictionary map)
   throws java.sql.SQLException; 

public Datum[] getOracleAttributes() 
   throws java.sql.SQLException;

public oracle.sql.StructDescriptor getDescriptor() 
   throws java.sql.SQLException;

public String getSQLTypeName() 
   throws java.sql.SQLException;

public void setAutoBuffering(boolean flag) 
   throws java.sql.SQLException;

public boolean getAutoBuffering() 
   throws java.sql.SQLException;

表5-9 OracleRefインタフェース

拡張 メソッド・シグネチャ

OracleRef

拡張

java.sql.Ref

public String getBaseTypeName() 
   throws SQLException;

public oracle.sql.StructDescriptor getDescriptor() 
   throws SQLException;

public oracle.sql.STRUCT getSTRUCT() 
   throws SQLException;

public Object getValue() 
   throws SQLException;

public Object getValue(Map map) 
   throws SQLException;

public void setValue(Object obj) 
   throws SQLException;

表5-10 OracleThinBlobインタフェース

拡張 メソッド・シグネチャ

OracleThinBlob

拡張

java.sql.Blob

int getBufferSize()throws java.sql.Exception

int getChunkSize()throws java.sql.Exception

int putBytes(long, int, byte[])throws java.sql.Exception

int getBinaryOutputStream()throws java.sql.Exception

表5-11 OracleThinClobインタフェース

拡張 メソッド・シグネチャ

OracleThinClob

拡張

java.sql.Clob

public OutputStream getAsciiOutputStream()
   throws java.sql.Exception;

public Writer getCharacterOutputStream()
   throws java.sql.Exception;

public int getBufferSize() throws java.sql.Exception;

public int getChunkSize() throws java.sql.Exception;

public char[] getChars(long l, int i)
   throws java.sql.Exception;

public int putChars(long start, char myChars[])
   throws java.sql.Exception;

public int putString(long l, String s)
         throws java.sql.Exception;