WebLogic JDBC プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

WebLogic Server でのサードパーティ ドライバの使い方

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

 


サードパーティ ドライバを使用した接続の取得

Oracle Thin Driver などのサードパーティ Type 4 ドライバを使用してデータベース接続を取得する方法について以下の節で説明します。接続を確立するには、DataSource オブジェクトと JNDI ルックアップを使用することをお勧めします。

サードパーティ ドライバでのデータ ソースの使い方

まず、Administration Console を使用してデータ ソースを作成し、次に JNDI ルックアップを使用して接続を確立します。

JNDI ルックアップを使用して接続を取得する

JNDI を使用してデータ ソースにアクセスするには、まずサーバの URL を指定して JNDI ツリーから Context オブジェクトを取得し、次にその Context オブジェクトと DataSource 名を使用してルックアップを実行します。

たとえば、Administration Console で定義された「myDataSource」という DataSource にアクセスするには、以下のようにします。

コード リスト 5-1 JNDI ルックアップを使用して接続を取得する
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
ht.put(Context.PROVIDER_URL,
"t3://hostname:port");
  Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
  try {
ctx = new InitialContext(ht);
javax.sql.DataSource ds
= (javax.sql.DataSource) ctx.lookup ("myDataSource");
conn = ds.getConnection();
   // これで conn オブジェクトを使用して
// 文を作成し、結果セットを検索できる
    stmt = conn.createStatement();
stmt.execute("select * from someTable");
rs = stmt.getResultSet();
...
// できる限り速やかに JDBC オブジェクトを閉じる
stmt.close();
stmt=null;
    conn.close();
conn=null;
 }
catch (Exception e) {
// エラー発生
log message;
}
finally {
try {
ctx.close();
} catch (Exception e) {
log message; }
try {
if (rs != null) rs.close();
} catch (Exception e) {
log message; }
try {
if (stmt != null) stmt.close();
} catch (Exception e) {
log message; }
try {
if (conn != null) conn.close();
} catch (Exception e) {
log message; }
}

(hostname は WebLogic Server が稼働するマシンの名前、port はそのマシンにおいて接続リクエストをリスンするポートの番号です。)

この例では、Hashtable オブジェクトを使って、JNDI ルックアップに必要なパラメータを渡しています。JNDI ルックアップを実行する方法は他にもあります。詳細については、『WebLogic JNDI プログラマーズ ガイド』を参照してください。

ルックアップの失敗を捕捉するために JNDI ルックアップが try/catch ブロックで包まれている点、コンテキストが finally ブロックの中で閉じられている点に留意します。

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

注意 : どうしても必要な場合以外は、物理的な JDBC 接続へ直接アクセスすることはお勧めしません。「データ ソースからの物理的な接続の取得」を参照してください。

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

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

接続を開く

物理的なデータベース接続を取得するには、最初に「JNDI ルックアップを使用して接続を取得する」の説明に従って接続プールから接続を取得してから、次のいずれかを実行します。

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

コード リスト 5-2 ベンダ固有の呼び出しに対する接続を開くコード サンプル
//この追加クラスと、必要なベンダのパッケージを
//インポートする
import weblogic.jdbc.extensions.WLConnection
.
.
.
myJdbcMethod()
{
  // 接続プールからの接続は、クラス メソッドやインスタンス メソッド
// ではなく、常にメソッド レベルの変数とする
Connection conn = null;
   try { 
ctx = new InitialContext(ht);
// JNDI ツリーでデータ ソースをルックアップして、
// 接続を要求する
javax.sql.DataSource ds
= (javax.sql.DataSource) ctx.lookup ("myDataSource");
     // プールされた接続は常に try ブロックで取得する。取得した
// 接続は完全に使用し、必要に応じて finally ブロックで
// 閉じる
conn = ds.getConnection();
     // WLConnection インタフェースに conn オブジェクトをキャストして、
// 基底の物理的な接続を取得できる
     java.sql.Connection vendorConn = 
((WLConnection)conn).getVendorConnection();

// vendorConn は閉じない
     // 次のように、vendorConn オブジェクトをベンダのインタフェースに
// キャストすることもできる。次に例を示す
// oracle.jdbc.OracleConnection vendorConn = (OracleConnection)
// ((WLConnection)conn).getVendorConnection()
     // ベンダ固有のメソッドで物理的な接続が必要に
// なる場合、物理的な接続を取得または保持するのではなく、
// 必要に応じて暗黙的に渡すほうがよい
// 次に例を示す //vendor.special.methodNeedingConnection(((WLConnection)conn)).getVendorConnection());

接続を閉じる

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

接続をどのように閉じるかは、Administration Console で [影響のある接続の削除を有効化] プロパティの値を設定して指定します。これらのオプションの詳細については、Administration Console の「JDBC データ ソース : コンフィグレーション : 接続プール」ページ、または『WebLogic Server MBean リファレンス』の「JDBCConnectionPoolParamsBean」を参照してください。

注意 : [影響のある接続の削除を有効化] プロパティは、明示的に getVendorConnection を呼び出すアプリケーションに対してのみ適用されます。
コード リスト 5-3 ベンダ固有の呼び出しに対する接続を閉じるサンプル コード
 // ベンダ固有の呼び出しの使用が完了したら、
// 接続への参照を即座に破棄する
// 参照は保持したり閉じたりしない
// 汎用 JDBC にはベンダ接続を使用しない
// 標準の JDBC には、論理的な (プールされた) 接続を使用する
vendorConn = null;
     ... do all the JDBC needed for the whole method... 
     // 論理的な (プールされた) 接続を閉じて
// 接続プールに戻し、参照を破棄する }
conn.close();
conn = null;
}
  catch (Exception e) 
{
// 例外を処理する
}
finally
{
// 念のため、論理的な (プールされた) 接続が閉じられているか
// どうか確認する
// 常に finally ブロックの最初の処理として
// 論理的な (プールされた) 接続を閉じる
if (conn != null) try {conn.close();} catch (Exception ignore){}
}
}
[影響のある接続の削除を有効化] が True の場合

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

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

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

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

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

 


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

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

ドライバのベンダが必要なメソッドをパブリック インタフェースで公開していない場合は、そのメソッドをパブリック インタフェースで公開するようにベンダにリクエストを提出してください。ARRAY、STRUCT、および REF に対する Oracle Thin Driver の拡張機能メソッドはパブリック インタフェースとして公開されていませんが、WebLogic Server ではこれらの拡張機能メソッドをサポートしています。「Oracle 拡張機能と Oracle Thin Driver の使用」を参照してください。

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

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

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

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

以降の節では、コード例で詳細を示します。特定の JDBC ドライバの特定の拡張機能メソッドについては、JDBC ドライバ ベンダのマニュアルを参照してください。

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

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

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

データ ソースでの接続の作成に使用する 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.*;
   // ドライバ インタフェースをインポートする。ドライバは、データ ソースでデータベース接続を
   // 作成するために使用するドライバと同じでなければならない

接続を取得する

JNDI、DataSource、およびデータ ソース オブジェクトを使用して、データベース接続を確立します。詳細については、「JNDI ルックアップを使用して接続を取得する」を参照してください。

   // データ ソース用の有効な DataSource オブジェクトを取得する
   // ここでは、その詳細を getDataSource() が
   // 処理すると仮定する
   javax.sql.DataSource ds = getDataSource(args);
   // DataSource から java.sql.Connection オブジェクトを取得する
   java.sql.Connection conn = ds.getConnection();

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

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

   orConn = (oracle.jdbc.OracleConnection)conn;
   // これは、weblogic.jdbc.vendor.oracle.OracleConnection へ接続をキャストする
   // 次のような非推奨の処理に代わるものである
   // orConn = (weblogic.jdbc.vendor.oracle.OracleConnection)conn;

ベンダ拡張機能を使用する

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

コード リスト 5-4 ベンダ拡張機能を使用する
// OracleConnection にキャストして、この接続の
// デフォルトの行プリフェッチ値を取得する
int default_prefetch = 
   ((oracle.jdbc.OracleConnection)conn).getDefaultRowPrefetch();
// これは、weblogic.jdbc.vendor.oracle.OracleConnection へ接続をキャストする
// 次のような非推奨の処理に代わるものである
// ((weblogic.jdbc.vendor.oracle.OracleConnection)conn).
// getDefaultRowPrefetch();
System.out.println("Default row prefetch 
is " + default_prefetch);
java.sql.Statement stmt = conn.createStatement();
// OracleStatement にキャストして、この文の
// 行プリフェッチ値を設定する
// このプリフェッチ値は、WebLogic Server とデータベースの
// 間の接続に適用されることに注意
      ((oracle.jdbc.OracleStatement)stmt).setRowPrefetch(20);
   // これは、weblogic.jdbc.vendor.oracle.OracleStatement へ
// 文をキャストする次のような非推奨の処理に
// 代わるものである
// ((weblogic.jdbc.vendor.oracle.OracleStatement)stmt).
// setRowPrefetch(20);
      // 通常の SQL クエリを実行して、その結果を処理...
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 拡張機能と Oracle Thin Driver の使用

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

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

以降の節では、Oracle 拡張機能向けの WebLogic Server インタフェースを使用するためのコード例を示します。サポートされるメソッドのリストについては、「Oracle 拡張機能インタフェースとサポートされるメソッドの表」を参照してください。詳細については、Oracle のマニュアルを参照してください。

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

Oracle JDBC 拡張機能の使用時の制限

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

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

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

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

ARRAY によるプログラミング

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

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

  1. 必要なクラスをインポートします
  2. 接続を取得して、接続のための文を作成します。
  3. 結果セット、または Callable Statement を使用して 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 拡張機能へアクセスするパッケージをインポートする

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

   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 オブジェクトを使用して、データベース接続を確立します。詳細については、「JNDI ルックアップを使用して接続を取得する」を参照してください。

   // 有効な DataSource オブジェクトを取得する
   // ここでは、その詳細を getDataSource() が
   // 処理すると仮定する
   javax.sql.DataSource ds = getDataSource(args);
   // DataSource から java.sql.Connection オブジェクトを取得する
   java.sql.Connection conn = ds.getConnection();

ARRAY を取得する

Callable Statement、または結果セットに 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";
//結果セットの取得
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);
//結果セットからの配列の取得
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. 結果セット、または Callable Statement を使用して ARRAY を取得します。
  3. Java アプリケーション内の配列を java.sql.Array または weblogic.jdbc.vendor.oracle.OracleArray として扱います。
  4. Prepared Statement または Callable Statement に setArray() メソッドを使用して、データベース内の配列を更新します。次に例を示します。
  5. String sqlUpdate = "UPDATE SCOTT." + tableName + " SET col1 = ?";
    conn  = ds.getConnection();
    pstmt = conn.prepareStatement(sqlUpdate);
    pstmt.setArray(1, array);
    pstmt.executeUpdate();
    

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

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

   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 を使用する場合、次の制限があります。

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

  1. 必要なクラスをインポートします (「Oracle 拡張機能へアクセスするパッケージをインポートする」を参照)。
  2. 接続を取得します (「接続を確立する」を参照)。
  3. getObject を使用して STRUCT を取得します。
  4. STRUCT を STRUCT (標準のメソッドを使用する場合は java.sql.Struct、標準のメソッドと Oracle 拡張機能メソッドを使用する場合は weblogic.jdbc.vendor.oracle.OracleStruct) にキャストします。
  5. 標準メソッド、または Oracle 拡張機能メソッドを使用して、データを操作します。

以下の節では、手順 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 メソッドがサポートされます。

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

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

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

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

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

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");
   //第 3 カラムはオブジェクト データ型を使用
   //getObject() により、値の配列にオブジェクトを割り当てる
   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 を使用してデータベースのオブジェクトを更新するには、Prepared Statement にある 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 を使用する場合、次の制限があります。

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

  1. 必要なクラスをインポートします (「Oracle 拡張機能へアクセスするパッケージをインポートする」を参照)。
  2. データベース接続を取得します (「接続を確立する」を参照)。
  3. 結果セット、または Callable Statement を使用して 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();
   //  java.sql.Ref にキャストし、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.Ref を weblogic.jdbc.vendor.oracle.OracleRef にキャストする場合に限り使用できます。

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

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

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

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

値を取得する

Oracle では、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 の新しい値を持つオブジェクトを作成してから、そのオブジェクトを setValue メソッドのパラメータとして渡します。次に例を示します。

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

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

Prepared Statement を使用して REF が指示する位置を更新するには、次の基本手順に従います。

  1. 新しい位置を指示する REF を取得します。この REF を使用して、別の REF の値を置き換えます。
  2. SQL コマンドの文字列を作成して、既存の REF の位置を、別の REF の値で置き換えます。
  3. Prepared Statement を作成、および実行します。

次に例を示します。

   try {
   conn = ds.getConnection();
   stmt = conn.createStatement();
   //REF を取得する
   rs = stmt.executeQuery("SELECT ref (s) FROM t1 s where s.ob1=5");
   rs.next();
   ref = (java.sql.Ref) rs.getRef(1); //REF を java.sql.Ref にキャストする
   }
   //Prepared Statement の作成と実行
   String sqlUpdate = "update t3 s2 set col = ? where s2.col.ob1=20";
   pstmt = conn.prepareStatement(sqlUpdate);
   pstmt.setRef(1, ref);
   pstmt.executeUpdate();

Callable Statement を使用して、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);
   // ストアド プロシージャを準備する
   sql = "{call SP1 (?, ?)}";
   cstmt = conn.prepareCall(sql);
   // IN パラメータの設定と OUT パラメータの登録
   cstmt.setRef(1, ref1);
   cstmt.registerOutParameter(2, getRefType(), "USER.OB");
   // 実行
   cstmt.execute();

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

JDBC アプリケーションに REF オブジェクトは作成できません。単に、データベースから既存の REF オブジェクトが検索されるだけです。ただし、文または Prepared Statement を使用して、データベースに 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 拡張機能インタフェースとサポートされるメソッドの表」を参照してください。

注意 : BLOB および CLOB (「LOB」と呼ばれる) を使用する場合、トランザクションの境界を考慮する必要があります。たとえば、すべての読み取り/書き込みをトランザクション内の特定の LOB に転送します。詳細については、Oracle Web サイトにある 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 { 
     // BLOB ロケータを取得する 
     myStatement = myConnect.createStatement(); 
rs = myStatement.executeQuery(selectBlob);
while (rs.next()) {
myRegularBlob = rs.getBlob("blobCol");
}
     // 記述用の基底の Oracle 拡張機能にアクセス
// する。OracleThinBlob インタフェースにキャストして
// Oracle メソッドにアクセスする
     os = ((OracleThinBlob)myRegularBlob).getBinaryOutputStream();
...
     } catch (SQLException sqe) { 
System.out.println("ERROR(general SQE): " +
sqe.getMessage());
}

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

Prepared Statement を使用した CLOB 値の更新

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

 


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

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

  1. Oracle Thin Driver または Oracle OCI Driver を使用する WebLogic Server コンフィグレーション内に JDBC データ ソースを作成します。「アプリケーションでの WebLogic JDBC の使い方」または Administration Console オンライン ヘルプの「JDBC データ ソースの作成」を参照してください。
  2. 注意 : XA 対応の JDBC ドライバを使用している場合は、KeepXAConnTillTxComplete=true に設定する必要があります。Administration Console オンライン ヘルプの「JDBC データ ソース : コンフィグレーション : 接続プール」を参照してください。
  3. アプリケーションで次のコードを実行します。
  4.    import weblogic.jdbc.extensions.WLConnection
       // WLS JDBC データ ソースから接続を取得する
       Connection conn = ds.getConnection();
       // 基底のベンダ接続オブジェクトを取得する
       oracle.jdbc.OracleConnection orConn = (oracle.jdbc.OracleConnection)
          (((WLConnection)conn).getVendorConnection());
       // CLIENT_IDENTIFIER を設定する (これはデータベース サーバ サイドの
       // USERENV ネーミング コンテキストからアクセス可能になる)
       orConn.setClientIdentifier(clientId);
       /* アプリケーション固有の処理を実行する (できれば orConn ではなく conn を使用する) */
       // 接続を WLS JDBC データ ソースに戻す前にクリーンアップする
       orConn.clearClientIdentifier(clientId);
       // ベンダ固有の呼び出しが完了したら、
       // すぐに物理的な接続への参照を破棄する
       orConn = null;
       // プールされた接続を閉じる
       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;
   // WLS JDBC データ ソースから接続を取得する
   Connection conn = ds.getConnection();
   // Oracle 拡張機能にキャストして CLIENT_IDENTIFIER を設定する
   // (これはデータベース サーバ サイドの USERENV
   // ネーミング コンテキストからアクセス可能になる)
      ((weblogic.jdbc.vendor.oracle.OracleConnection)conn).setClientIdentifier(clientId);
   /* アプリケーション固有の処理を実行する */
   // 接続を WLS JDBC データ ソースに戻す前にクリーン アップする
   ((OracleConnection)conn).clearClientIdentifier(clientId);
   // 接続を閉じる
   conn.close();

 


さまざまなバージョンの WebLogic Server クライアント/サーバ間におけるベンダ拡張機能のサポート

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 拡張機能インタフェースに対して適用されます。

注意 : 標準の JDBC インタフェースは、クライアントまたはサーバのバージョンに関係なくサポートされます。

 


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

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

表 5-2 に示すインタフェースは、これらの拡張機能メソッドにアクセスするインタフェースが Oracle では提供されていないため、引き続き有効です。

表 5-2 WebLogic Server で引き続きサポートされる Oracle インタフェース
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-3 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;
(非推奨)
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-4 OracleStatement インタフェース
拡張
メソッド シグネチャ
OracleStatement
java.sql.statement の拡張
(このインタフェースは非推奨表 5-1 を参照)。
String getOriginalSql() 
throws java.sql.SQLException;
String getRevisedSql() 
throws java.sql.SQLException;
(Oracle 8.1.7 では非推奨。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;
(非推奨)
int getRowPrefetch() 
throws java.sql.SQLException;
int getWaitOption() 
throws java.sql.SQLException;
(非推奨)
int sendBatch() 
throws java.sql.SQLException;
OracleStatement
java.sql.statement の拡張
(続き)
(このインタフェースは非推奨表 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;
(非推奨)
void setRowPrefetch(int i) 
throws java.sql.SQLException;
void setWaitOption(int i) 
throws java.sql.SQLException;
(非推奨)

表 5-5 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-6 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-7 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-8 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-9 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-10 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-11 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-12 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;


  ページの先頭       前  次