| Oracle® Fusion Middleware Oracle WebLogic Server JDBCのプログラミング 11g リリース1 (10.3.5) B60995-03 |
|
![]() 前 |
![]() 次 |
以下の節では、サード・パーティJDBCドライバの設定および使用方法について説明します。
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拡張機能をクライアント側コードで使用するには、オブジェクト型またはデータ型がシリアライズ可能でなければなりません。これに対する例外として、以下のオブジェクト型があります。
CLOB
BLOB
InputStream
OutputStream
これらのオブジェクト型についてはWebLogic Serverでデシリアライゼーションが行われるので、クライアント側コードで使用できます。
|
注意: クライアントとサーバーで異なるバージョンのWebLogic Serverを使用する場合は、相互運用性の制限があります。「さまざまなバージョンのWebLogic Serverクライアント/サーバー間におけるAPI拡張機能のサポート」を参照してください。 |
JDBCドライバで公開されている拡張機能メソッドを使用するには、アプリケーション・コードに次のような手順を組み込む必要があります。
データ・ソースでの接続の作成に使用するJDBCドライバから、ドライバ・インタフェースをインポートする。
データ・ソースから接続を取得する。
接続オブジェクトをベンダーの接続インタフェース型にキャストする。
ベンダーのドキュメントで説明されているとおりにAPI拡張機能を使用する。
ルックアップの失敗を捕捉するためにJNDIルックアップがtry/catchブロックで包まれている点、コンテキストがfinallyブロックの中で閉じられている点に留意する。
以降の節では、サンプル・コードで詳細を示します。特定のJDBCドライバの特定の拡張機能メソッドについては、JDBCドライバ・ベンダーのドキュメントを参照してください。
|
注意: どうしても必要な場合以外は、物理的なJDBC接続へ直接アクセスすることはお勧めしません。 |
一般的には、WebLogic Serverによって提供される汎用JDBC接続(ラップされた物理接続)に対する接続のキャストを行います。これにより、サーバー・インスタンスは接続プールに対する接続の管理、接続プール機能の有効化、およびアプリケーションに提供される接続の品質維持ができるようになります。場合によって、DBMSは物理的な接続(実際のベンダーのJDBC接続)の直接アクセスを必要とする、標準以外の追加のJDBC関連クラスを提供しています。接続プール内の物理的な接続に直接アクセスするには、getVendorConnectionを使用して接続をキャストする必要があります。
|
注意: Oracleでは、物理的な接続getVendorConnectionSafeにアクセスするための別のメカニズムも提供します。このメカニズムでも、プールされているデータベース接続(論理接続)からベースとなる物理接続(ベンダー接続)が返されます。ただし、接続を閉じると、「影響のある接続の削除を有効化」の設定に関係なく、プールに返されます。詳細は、「getVendorConnectionSafe」を参照してください。 |
以下の節では、物理的な接続の取得について説明します。
物理的なデータベース接続を取得するには、最初に接続プールから接続を取得してから、次のいずれかを実行します。
物理的な接続を必要とするメソッド内で、物理的な接続を暗黙的に渡す(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(デフォルト値)のときに論理的な接続を閉じると、サーバー・インスタンスは基底の物理的接続を破棄して、それに取って代わる新しい接続を作成します。このアクションで、プールは次のユーザーに対して、そのユーザーがプール接続の唯一のユーザーであることを確実に保証できるようになります。この構成により、接続を閉じるための簡単で安全な方法がもたらされます。ただし、以下の理由により、パフォーマンス上の損失が生じます。
物理的な接続は接続プールの新しいデータベース接続で置き換えられる。このため、アプリケーション・サーバーとデータベース・サーバーの両方でリソースが使用されます。
元の接続のStatementキャッシュが閉じられて、新しい接続用に新しいキャッシュが開かれる。したがって、Statementキャッシュを使用する際のパフォーマンスの利点は失われます。
[影響のある接続の削除を有効化]をfalseで使用するのは、公開されている物理的な接続が、論理的な接続を閉じた後、保持または再利用されることが絶対にないと確信している場合のみです。
[影響のある接続の削除を有効化]がfalseのときに論理的な接続を閉じると、サーバー・インスタンスは単に物理的な接続を、再利用のために接続プールに返します。この構成では、パフォーマンス上の損失は最小限に抑えられますが、サーバー・インスタンスは、接続の品質や、論理的な接続が閉じられた後の接続管理の効率を保証はしません。接続が接続プールに返される前に、その接続が他のアプリケーションによる再利用に適していることを確認する必要があります。
接続プールの論理的な接続の代わりに物理的な接続を使用することはお勧めしません。ただし、たとえばSTRUCTの作成などに、物理的な接続を使用する必要がある場合は、以下の負担と制限を考慮してください。
物理的な接続はサーバー側コードでのみ使用できる。
物理的な接続を使用する場合、エラー処理や文のキャッシングなど、WebLogic Serverが提供する接続管理の利点がすべて失われる。
物理的な接続は、それを必要とするベンダー固有のメソッドまたはクラスにのみ使用する。汎用JDBC (文やトランザクション呼出しの作成など)には物理的な接続を使用しないでください。
以下のサンプル・コードでは、Oracle Thin Driverで利用できる拡張機能メソッドを使用して、JDBCのAPI拡張機能の使用方法を示します。使用する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.*;
// 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;
次のコードでは、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のほとんどの拡張機能では、「JDBCインタフェースのAPI拡張機能の使い方」で説明したような標準的な方法を使用できます。ただし、Oracle Thin Driverでは、以下のクラスの拡張機能メソッドに対するパブリック・インタフェースを提供していません。
oracle.sql.ARRAY
oracle.sql.STRUCT
oracle.sql.REF
oracle.sql.BLOB
oracle.sql.CLOB
WebLogic Serverでは、これらのクラスの拡張機能メソッドにアクセスするために、独自のインタフェースを提供しています。
weblogic.jdbc.vendor.oracle.OracleArray
weblogic.jdbc.vendor.oracle.OracleStruct
weblogic.jdbc.vendor.oracle.OracleRef
weblogic.jdbc.vendor.oracle.OracleThinBlob
weblogic.jdbc.vendor.oracle.OracleThinClob
以降の節では、これらの拡張機能のWebLogic Serverインタフェースを使用するためのサンプル・コードを示します。サポートされるメソッドのリストについては、「Oracle Thin Driver拡張機能インタフェースとサポートされるメソッドの表」を参照してください。詳細については、Oracleのドキュメントを参照してください。
|
注意: このプロセスを使用すると、「Oracle Thin Driver拡張機能インタフェースとサポートされるメソッドの表」で示す拡張機能向けのWebLogic Serverインタフェースを使用できます。ただし、上記以外のインタフェースは非推奨になっており、WebLogic Serverの今後のリリースで削除される予定です。 |
JDBCインタフェースにOracle Thin Driver拡張機能を使用する場合、次の制限があります。
Oracle拡張機能は、サーバーと同じJVMを使用したサーバー側アプリケーションのみで、ARRAY、REF、およびSTRUCTの各オブジェクトに適用できます。リモート・クライアント・アプリケーションのARRAY、REFおよびSTRUCTにOracle拡張機能は使用できません。
標準以外のOracle記述子オブジェクトを使用して、アプリケーション内でARRAYおよびSTRUCTを作成できます。
Oracle8オブジェクト型へのREFを含む表に対する問合せを実行できます。REFはJDBCによってJava oracle.sql.REFオブジェクトとして具体化されます。JDBCでは、ゼロからの新規REFの作成はサポートしていません。データベースに移動して新規REFをSQLに挿入し、REFを選択してクライアントに返します。
クライアントとサーバーで異なるバージョンのWebLogic Serverを使用する場合は、相互運用性の制限がある。「さまざまなバージョンのWebLogic Serverクライアント/サーバー間におけるAPI拡張機能のサポート」を参照してください。
|
注意: JDBC 4.0 APIでは、次のjava.sql.Connectionは記述子なしにアプリケーション内でSTRUCTおよびARRAYオブジェクトを作成するために使用できます。
|
以下のサンプル・コードでは、パブリック・インタフェースとして利用できないOracle拡張機能に対するWebLogic Serverインタフェースにアクセスする方法を示します。次のようなインタフェースがあります。
ARRAY - 「ARRAYによるプログラミング」を参照してください。
STRUCT - 「STRUCTによるプログラミング」を参照してください。
REF - 「REFによるプログラミング」を参照してください。
BLOBおよびCLOB - 「BLOBとCLOBを使用したプログラミング」を参照してください。
WebLogic Serverと共にサーバー・サンプルをインストールするオプションを選択した場合は、JDBCサンプルの詳細なサンプル・コードを参照してください。JDBCサンプルは通常、WL_HOME\samples\server\src\examples\jdbcにあります。WL_HOMEはWebLogic Serverをインストールしたフォルダです。
WebLogic Serverのサーバー側アプリケーションでは、結果セット、またはJava配列として呼出し可能ステートメントを使用することにより、Oracle Collection (SQL ARRAY)を実体化できます。
WebLogic ServerアプリケーションでARRAYを使用するには、次の手順に従います。
必要なクラスをインポートします。
接続を取得して、接続のための文を作成します。
結果セット、または呼出し可能ステートメントを使用してARRAYを取得します。
ARRAYをjava.sql.Arrayまたはweblogic.jdbc.vendor.oracle.OracleArrayのいずれかとして使用します。
標準Javaメソッド(java.sql.Arrayとして使用)、またはOracle拡張機能メソッド(weblogic.jdbc.vendor.oracle.OracleArrayにキャスト)を使用して、データを操作します。
以下の節では、これらのアクションの詳細について説明します。
|
注意: ARRAYはサーバー側アプリケーションでのみ使用できます。リモート・クライアント・アプリケーションではARRAYは使用できません。 |
この例で使用する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();
呼出し可能ステートメント、または結果セットに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を更新するには、次の手順に従います。
更新する配列がデータベースにない場合、PL/SQLを使用してデータベースに配列を作成します。
結果セット、または呼出し可能ステートメントを使用してARRAYを取得します。
Javaアプリケーション内の配列をjava.sql.Arrayまたはweblogic.jdbc.vendor.oracle.OracleArrayとして扱います。
プリペアド・ステートメントまたは呼出し可能ステートメントにsetArray()メソッドを使用して、データベース内の配列を更新します。次に例を示します。
String sqlUpdate = "UPDATE SCOTT." + tableName + " SET col1 = ?"; conn = ds.getConnection(); pstmt = conn.prepareStatement(sqlUpdate); pstmt.setArray(1, array); pstmt.executeUpdate();
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()
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を使用するには、次の手順に従います。
必要なクラスをインポートします。(「Oracle拡張機能へアクセスするパッケージをインポートする」を参照)。
接続を取得します(「接続を確立する」を参照)。
getObjectを使用してSTRUCTを取得します。
STRUCTをSTRUCT (標準のメソッドを使用する場合はjava.sql.Struct、標準のメソッドとOracle拡張機能メソッドを使用する場合はweblogic.jdbc.vendor.oracle.OracleStruct)にキャストします。
標準メソッド、またはOracle Thin Driver拡張機能メソッドを使用して、データを操作します。
以下の節では、手順3 - 5について詳しく説明します。
データベース・オブジェクトを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にキャストすると、標準メソッドと拡張機能メソッドの両方を使用できるようになります。
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の個々の属性値を取得するには、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を使用してデータベースのオブジェクトを更新するには、プリペアド・ステートメントにある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を使用する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を変更することにより、同じオブジェクト・タイプの別のオブジェクトを指示したり、null値を割り当てたりすることができます。
|
注意: REFを使用する場合、次の制限があります。
|
WebLogic ServerアプリケーションでREFを使用するには、次の手順に従います。
必要なクラスをインポートします。(「Oracle拡張機能へアクセスするパッケージをインポートする」を参照)。
データベース接続を取得します(「接続を確立する」を参照)。
結果セット、または呼出し可能ステートメントを使用してREFを取得します。
結果をSTRUCT、またはJavaオブジェクトにキャストします。これにより、STRUCTメソッド、またはJavaオブジェクトのメソッドを使用して、データを操作できるようになります。
また、データベースでREF作成したり、更新したりできます。
手順3と4について以下の節で詳しく説明します。
アプリケーションで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.Refをweblogic.jdbc.vendor.oracle.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の更新では、次のような操作が行えます。
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が指示する位置を更新するには、次の基本手順に従います。
新しい位置を指示するREFを取得します。このREFを使用して、別のREFの値を置き換えます。
SQLコマンドの文字列を作成して、既存のREFの位置を、別のREFの値で置き換えます。
プリペアド・ステートメントを作成、および実行します。
次に例を示します。
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();
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)。
この節では、OracleBlobインタフェースへのアクセス方法を示すサンプル・コードについて説明します。WebLogic Serverでサポートされるメソッドを使用している場合、この例で示す構文は、OracleBlobインタフェースで使用できます。「Oracle Thin Driverの拡張機能インタフェースとサポートされるメソッドの表」を参照してください。
|
注意: BLOBおよびCLOB (「LOB」と呼ばれる)を使用する場合、トランザクションの境界を考慮する必要があります。たとえば、すべての読取り/書込みをトランザクション内の特定のLOBに転送します。詳細については、Oracle Webサイト(http://www.oracle.com)にあるOracleのドキュメントの「LOB Locators and Transaction Boundaries」を参照してください。 |
BLOBロケータまたはハンドルは、Oracle Thin Driver Blobへの参照です。
String selectBlob = "select blobCol from myTable where blobKey = 666"
次のコードでは、Connectionがすでに確立されていることを前提としています。
ResultSet rs = null; Statement myStatement = null; java.sql.Blob myRegularBlob = null; java.io.OutputStream os = null;
この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の現在の値がabcdefghijの場合に、プリペアド・ステートメントを使用してzxywでCLOBを更新すると、CLOBの値はzxywefghijになります。プリペアド・ステートメントで更新された値を修正するには、dbms_lob.trimプロシージャを使用して、更新後に残った余分な文字を削除します。dbms_lob.trimプロシージャの詳細については、Oracleのドキュメントを参照してください。
Oracle仮想プライベート・データベース(Oracle Virtual Private Database: VPD)は、サーバーによって強制されるアプリケーション定義のファイン・グレイン・アクセス制御と、Oracleデータベース・サーバーのセキュアなアプリケーション・コンテキストを組み合わせたものです。WebLogic ServerアプリケーションでVPDを使用するには、以下の手順に従います。
WebLogic Server構成でOracle Thinドライバを使用するJDBCデータ・ソースを作成します。Oracle WebLogic Server管理コンソール・ヘルプの第2章「アプリケーションでのWebLogic JDBCの使用方法」またはJDBCデータ・ソースの作成を参照してください。
|
注意: XA対応のJDBCドライバを使用している場合、KeepXAConnTillTxComplete=trueに設定する必要があります。Oracle WebLogic Server管理コンソール・ヘルプのJDBCデータ・ソース: 構成: 接続プールを参照してください。 |
アプリケーションで次のコードを実行します。
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.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はバッチ・サイズに到達しない間、DBMSに更新を送信せず、文が閉じられるまで待機する場合があります。
プリペアド文を閉じると、WebLogic Serverは文を閉じずに標準JDBC状態に返します。続いて文を接続のキャッシュに戻すため、次に必要な時に文を再配信できます。
すべての更新が確実に配信されるようにするには、文または接続を閉じる前に、文を最後に使用した後でsendBatch()を明示的に呼び出す必要があります。
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拡張機能インタフェースに対して適用されます。
weblogic.jdbc.vendor.oracle.OracleConnection
weblogic.jdbc.vendor.oracle.OracleStatement
weblogic.jdbc.vendor.oracle.OraclePreparedStatement
weblogic.jdbc.vendor.oracle.OracleCallableStatement
weblogic.jdbc.vendor.oracle.OracleResultSet
weblogic.jdbc.vendor.oracle.OracleThinBlob
weblogic.jdbc.vendor.oracle.OracleThinClob
weblogic.jdbc.vendor.oracle.OracleArray
weblogic.jdbc.vendor.oracle.OracleRef
weblogic.jdbc.vendor.oracle.OracleStruct
|
注意: 標準のJDBCインタフェースは、クライアントまたはサーバーのバージョンに関係なくサポートされます。 |
以前のリリースの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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
(このインタフェースは非推奨。表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; |
|
拡張
(続き) (このインタフェースは非推奨。表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;
|
|
拡張
(続き) (このインタフェースは非推奨。表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; |
|
拡張
(続き) (このインタフェースは非推奨。表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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
(このインタフェースは非推奨。表5-1を参照) |
String getOriginalSql() throws java.sql.SQLException; (Removed in Oracle 11g.) String getRevisedSql() throws java.sql.SQLException; ( |
|
拡張
(このインタフェースは非推奨。表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; ( |
表5-4 OracleResultSetインタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
(このインタフェースは非推奨。表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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
(このインタフェースは非推奨。表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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
(このインタフェースは非推奨。表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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
|
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; |
|
拡張
(続き) |
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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
|
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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
|
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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
|
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インタフェース
| 拡張 | メソッド・シグネチャ |
|---|---|
|
拡張
|
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;
|