以下のコード例は、WebLogic Oracle 拡張機能から標準 JDBC インタフェースに アクセスする方法を示しています。以下の例では、OracleConnection および
OracleStatement 拡張機能を使用します。この例の構文は、WebLogic Server でサ
ポートされるメソッドを使用する場合、OracleResultSet、OraclePreparedStatement、および OracleCallableStatement の各インタフェースで
使用できます。サポートされるメソッドについては、6-18ページの「Oracle イ ンタフェースの表」を参照してください。OracleThinBlob および OracleThinClob インタフェースへのアクセス方法の例に
ついては、6-17ページの「Oracle Blob/Clob インタフェースにアクセスするサン プル コード」を参照してください。Oracle 拡張機能へアクセスするパッケージをインポートする
この例で使用する Oracle インタフェースをインポートします。
OracleConnection
および OracleStatement インタフェースは、oracle.jdbc.OracleConnection およびoracle.jdbc.OracleStatement に相当し、WebLogic Server でサポートされるメソッ
ドを使用する場合、これらの Oracle インタフェースと同様に使用できます。import java.sql.*;
import java.util.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import weblogic.jdbc.vendor.oracle.OracleConnection;
import weblogic.jdbc.vendor.oracle.OracleStatement;
接続を確立する
JNDI、DataSource、および接続プール オブジェクトを使用して、接続を確立し
ます。詳細については、6-8ページの「JNDI を使用した接続の取得」を参照し てください。6 WebLogic Server でのサードパーティ ドライバの使い方
// 接続プールの有効な DataSource オブジェクトを取得する // ここでは、その詳細を getDataSource() が
// 処理すると仮定する
javax.sql.DataSource ds = getDataSource(args);
// DataSource から java.sql.Connection オブジェクトを取得する java.sql.Connection conn = ds.getConnection();
デフォルトの行プリフェッチ値を取得する
次のコードでは、Oracle Thin Driver で使用できる Oracle の行プリフェッチ メ ソッドの使い方を示します。
// OracleConnection にキャストして、この接続の // デフォルトの行プリフェッチ値を取得する
int default_prefetch =
((OracleConnection)conn).getDefaultRowPrefetch();
System.out.println("Default row prefetch is " + default_prefetch);
java.sql.Statement stmt = conn.createStatement();
// OracleStatement にキャストして、この文の // 行プリフェッチ値を設定する
// このプリフェッチ値は、WebLogic Serverとデータベースの // 間の接続に適用されることに注意
((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 Thin Driver の拡張機能
Oracle Blob/Clob インタフェースにアクセスする サンプル コード
この節では、OracleThinBlob インタフェースへのアクセス方法を示すサンプル コードを提供します。WebLogic Server でサポートされるメソッドを使用する場 合、この例の構文は、OracleThinBlob インタフェースで使用できます。
6-18
ページの「
Oracle
インタフェースの表」を参照してください。注意:
Blob および Clob(
「LOB」と呼ばれる)を使用する場合、トランザクションの境界を考慮する必要があります。たとえば、すべての読み取り
/
書き込みをトランザクション内の特定の LOB に転送します。詳細につい ては、Oracle Web サイト にある Oracle のマニュアルの「LOB Locatorsand Transaction Boundaries」を参照してください。
Blob および Clob 拡張機能にアクセスするパッケージをイン ポートする
インポートするクラスに次の WebLogic Server Oracle Blob も加えます。
import weblogic.jdbc.vendor.oracle.OracleThinBlob;
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;
6 WebLogic Server でのサードパーティ ドライバの使い方
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 に残ります。たとえ ば、現在の値が abcdefghijである CLOB を Prepared Statement で
zxywという
値に更新すると、更新後の CLOB の値は zxywefghijになります。Prepared
Statement で更新した結果を正しい値にするには、
dbms_lob.trimプロシージャ
を使って、更新後に残っている余分な文字を削除する必要があります。
dbms_lob.trim