ヘッダーをスキップ

Oracle® Databaseプラットフォーム共通日本語README
10g リリース1(10.1)

 
Go To Table Of Contents
目次

Previous Next

Oracle JDBC Drivers README

原典情報: $ORACLE_HOME/jdbc/Readme.txt

目次

1 このリリースの新機能

2 ドライバのバージョン

3 このリリースの内容

4 NLS拡張機能のjarファイル(クライアント側のみ)

5 インストール

6 環境の設定

7 JDBCドライバ使用時に役立つヒント

8 以前のoracle.jdbc.driverパッケージはまもなく廃止

9 Javaストアド・プロシージャ

10 このリリースの既知の問題/制限事項


1 このリリースの新機能

JDK 1.4以上の新規クラス・ファイル名

このリリースからは、JDK 1.4以上のクラス・ファイル名がojdbc<jdk ver>.jarとなります。したがって、JDK 1.4のクラス・ファイル名はojdbc14.jarです。JDK 1.1とJDK 1.2のクラス・ファイル名に変更はありません。JDK 1.2以上のクラス・ファイルについては、.zipバージョンは提供されません。

ThinドライバでのLOBのダイレクト・サポート

Thinドライバでは、BFILE、BLOBおよびCLOBのダイレクト・サポートが提供されるようになりました。以前のリリースでは、PL/SQLルーチンのコールを介してサポートされていました。

文キャッシュ

Oracle文キャッシュAPIが変更されています。以前のAPIには実質上の問題があり、APIの変更が唯一の解決方法でした。以前のAPIも引き続きサポートされますが、使用禁止になっています。新規APIの詳細は、JavaDocを参照してください。

RACで証明済

Oracle JDBC Driversは、Oracle9i RAC環境で正常に動作することが証明されています。

JDBC 3.0機能のサポート

いくつかの重要なJDBC 3.0機能がサポートされます。

JDK 1.4: ojdbc14.jarおよびorai18n.jarを使用してJDK1.4がサポートされます。

グローバル・トランザクションとローカル・トランザクションの間の切替え: XA接続を使用すると、アプリケーションではグローバル・トランザクションとローカル・トランザクションの間で切り替えることができます。

セーブポイント: ojdbc14.jarでセーブポイントがサポートされます。また、Oracleの拡張機能を介してclasses12およびclasses11でもサポートされます。拡張機能には、ojdbc14.jarとの上位互換性があります。詳細は、JavaDocを参照してください。

プリコンパイルされたSQL文の再利用: 様々なプール接続でPreparedStatementsを使用できます。これは、中間層アプリケーションにとって重要なパフォーマンス改善点です。

接続のラップ

oracle.jdbc.OracleConnectionを実装するユーザー定義クラスでOracleConnectionインスタンスをシームレスにラップできるようになりました。この種のラッパーはConnection引数が必要な場所(CustomDatum以外)であればどこででも使用でき、getConnectionの値として戻されます。可能な場合は、ユーザー・サブクラスoracle.jdbc.OracleConnectionWrapperを使用することをお薦めします。それ以外の場合は、実装のベースとしてsamplesディレクトリにあるOracleConnectionWrapperのソースを使用してください。

廃止になったRAW(Object)コンストラクタ

RAW(Object)コンストラクタは廃止になりました。このコンストラクタは削除されませんが、その動作は次回のメジャー・リリースで変更されます。現在は文書化されていますが、Stringオブジェクトを渡すと異常な動作が発生します。プラットフォームのエンコーディングでStringのバイト表現を含むRAWが構成されます。StringとRAWの間の他のすべての変換では、StringがRAWによるバイトを表現する16進文字であるとみなされます。次回のメジャー・リリースでは、このコンストラクタがその規則に準拠するように変更されます。また、これはStringから構成されるRAWフィールドを持つADTにも影響します。RAWには2つの静的メソッドが追加されています。oldRAW(Object)は、常に現行のプラットフォームのエンコーディングに従って動作します。newRAW(Object)は、常に16進文字に従って動作します。詳細は、JavaDocを参照してください。

DMSメトリック

classes12dms.jarの使用時にJDBCによりレポートされるDMSメトリックが再編成されています。実行時間とフェッチ時間など、Statementsに関する追加のメトリックがレポートされます。

CHAR列またはVARCHAR列のdefineColumnType(int, int)

CHARまたはVARCHARとしてdefineColumnTypeをコールするときにサイズを渡さないと、SQLWariningが発生します。次回のメジャー・リリースからは、SQLExceptionが発生するようになります。

OracleLog

OracleLogのコールを含むメソッドの数が大幅に増加しています。また、システム・プロパティを設定してOracleLogのトレースを有効化できます。トレースを有効化するには、oracle.jdbc.Traceをtrueに設定してください。oracle.jdbc.LogFileには、トレース出力ファイルの名前を設定します。このプロパティを設定しないと、トレース出力はSystem.outに送られます。OracleLogのトレースを使用できるのは、デバッグ・クラス・ファイルclasses12_g.*、ojdbc_g.jarおよびサーバー側ドライバのみです。

2 ドライバのバージョン

リリース10.1.0.2.0には、次のドライバ・バージョンがあります。

JDBC Thinドライバ10.1.0.2.0

クライアント・アプリケーション、中間層サーバーおよびアプレット用の100% Javaクライアント側JDBCドライバ。

JDBC OCIドライバ10.1.0.2.0

OCI 10.1.0.2.0がインストールされているマシン用のクライアント側JDBCドライバ。

サーバー側JDBC Thinドライバ10.1.0.2.0

リモートOracleデータベースにアクセスするデータベース内のJavaプログラム用のJDBCドライバ

サーバー側JDBC内部ドライバ10.1.0.2.0

Javaストアド・プロシージャ用のサーバー側JDBCドライバ。このドライバはJDBC Kprbドライバと呼ばれていました。

詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。

3 このリリースの内容

全プラットフォーム

[ORACLE_HOME]/jdbc/libには、次のファイルが含まれています。

[ORACLE_HOME]/jdbc/doc/javadoc.tarには、JDBCのJavadocが含まれています。このリリースには、Oracle JDBCのパブリック・クラスのパブリックAPIに関するJavadocファイルのベータ版が含まれています。

[ORACLE_HOME]/jdbc/demo/demo.tarには、JDBCのサンプル・プログラムが含まれています。

Windowsプラットフォームの場合

[ORACLE_HOME]\binディレクトリには、JDBC OCIドライバ用ライブラリocijdbc10.dllおよびheteroxa10.dllがあります。

Windows以外のプラットフォームの場合

[ORACLE_HOME]/libディレクトリには、JDBC OCIドライバ用の共有ライブラリlibocijdbc10.so、libocijdbc10_g.so、libheteroxa10.soおよびlibheteroxa10_g.soがあります。

4 NLS拡張機能のjarファイル(クライアント側のみ)

サーバー側内部JDBCドライバは完全なNLSサポートを提供します。NLS拡張機能のjarファイルは不要です。この項の説明は、Oracle JDBC ThinドライバとOracle JDBC OCIドライバにのみ適用されます。

基本のjarファイル(classes12.jarおよびojdbc14.jar)には、次のように完全なNLSサポートの提供に必要なクラスがすべて含まれています。

Object型またはCollection型のCHAR/VARCHARデータ・メンバーに他のキャラクタ・セットを使用する必要がある場合は、CLASSPATHにNLS拡張機能のjarファイル(orai18n.jar)を含める必要があります。新規のorai18n.jarにより、以前のリリースのnls_charset*.*ファイルが置き換えられます。

NLS拡張機能のjarファイルは、多数のキャラクタ・セットをサポートする必要があるため大型であることに注意してください。必要な場合は、拡張機能のjarファイルから必要なクラスのみを含めるように選択できます。そのためには、最初にNLS拡張機能のjarファイルを解凍し、必要なファイルのみをCLASSPATHに指定します。拡張機能のjarファイルでは、各クラスに次の形式の名前が使用されています。

  lx20<OracleCharacterSetId>.glb キャラクタ・セット
  lx1<OracleTerritoryId>.glb 地域
  lx3<OralceLinguisticSortId>.glb 言語ソート
  lx4<OracleMapingId>.glb マッピング

<Oracle*>は、対応するOracle NLS IDの16進表現です。

また、各国対応のJDBCエラー・メッセージ・ファイルを選択的に含めることもできます。メッセージ・ファイルは、classes12*.jarおよびojdbc14*.jar内のoracle/jdbc/driver/Messages_*.propertiesファイルに含まれています。

5 インストール

CLASSPATHには、Oracle JDBC Driversの複数バージョンを指定しないでください。Oracle Installerを実行すると、Oracle JDBC Driversが[ORACLE_HOME]/jdbcディレクトリにインストールされます。

6 環境の設定

Windowsプラットフォームの場合

Solaris/HP Tru64 Unixの場合

HP/UXの場合

AIXの場合

7 JDBCドライバ使用時に役立つヒント

Oracle JDBC Driversの使用方法の詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。この項では、ヒントのみを説明します。これらのヒントは網羅的ではありません。

あくまでもJDBCプログラムで必要な事項です。

1) JDBCを使用するプログラムに必要なJDBCクラスをインポートします。 次に例を示します。

  import java.sql.*;
  import java.math.*;

OracleDataSourceを使用するには、次のように入力する必要があります。

  import oracle.jdbc.pool.OracleDataSource;

2) OracleDataSourceインスタンスを作成します。

  OracleDataSource ods = new OracleDataSource( );

3) デフォルトのプロパティを使用しない場合は、必要なプロパティを設定します。JDBCドライバごとに異なる接続URLを使用する必要があります。

  ods.setUser("my_user");
  ods.setPassword("my_password");

JDBC OCIドライバの場合

Bequeathed接続を確立するには、URLを次のように設定します。
  ods.setURL("jdbc:oracle:oci:@");
リモート接続を確立するには、URLを次のように設定します。
  ods.setURL("jdbc:oracle:oci:@<database>");
<database>は、TNSEntryNameまたはtnsnames.oraに定義されているSQL*Netの名前/値ペアです。

JDBC Thinドライバまたはサーバー側Thinドライバの場合

  ods.setURL("jdbc:oracle:thin:@<database>");

<database>は、//<host>:<port>/<service_name>形式の文字列またはSQL*Netの名前/値ペアです。

サーバー側JDBC内部ドライバの場合

  ods.setURL("jdbc:oracle:kprb:");

後続の「:」が必要であることに注意してください。サーバー側内部ドライバを使用する場合は、常に実行中のデータベースに接続します。また、次のように指定できます。

  Connection conn = new oracle.jdbc.OracleDriver().defaultConnection( );

4) OracleDataSourceクラスに定義されているgetConnection()メソッドを使用して、データベースへの接続をオープンします。

  Connection conn = ods.getConnection( );

8 以前のoracle.jdbc.driverパッケージはまもなく廃止

Oracle9iからは、JDBCへのOracleの拡張機能はoracle.jdbcパッケージで提供されます。このパッケージには、java.sql内のクラスとインタフェースでパブリックJDBC APIが指定されるのと同様の方法で、Oracleの拡張機能を指定するクラスとインタフェースが含まれています。

9iの初期バージョン以降は、oracle.jdbc.driverパッケージの使用が廃止されています。コードでは、かわりにoracle.jdbcパッケージを使用してください。Oracle9i以降の新機能には、oracle.jdbc.driverパッケージの使用との互換性がありません。このリリースでは下位互換性を提供するために古いoracle.jdbc.driverパッケージも引き続きサポートされますが、このパッケージは最終的には次回のメジャー・リリースで削除されます。古いoracle.jdbc.driverパッケージを使用する既存のアプリケーションが残っている場合は、この時点でコードを変換してください。

ソース内でoracle.jdbc.driverをoracle.jdbcで置き換えて再コンパイルするだけで、コードを変換できます。この操作は、ピース単位では実行できません。アプリケーションで参照されるクラスとインタフェースをすべて変換する必要があります。

9 Javaストアド・プロシージャ

OracleのObjectを使用したコールインとインスタンス・メソッドの例は、次のファイルにあります。

  [ORACLE_HOME]/javavm/demo/demo.zip

このファイルを解凍すると、次のディレクトリに例が抽出されます。

  [ORACLE_HOME]/javavm/demo/examples/jsp

10 このリリースの既知の問題/制限事項

次のリストに、既知の問題または制限事項を示します。

Bug#1516862(リリース9.0.1以降)

Javaストアド・プロシージャの引数としてOPAQUE型を渡すと機能しません。

Bug#1542130(リリース9.0.1以降)

マルチスレッド環境でOciConnectionPoolを使用すると停止することがあります。

Bug#1640110(リリース9.0.1以降)

問合せ文字列に無効な二重引用符を含む問合せを実行すると、JDBC OCIドライバが停止することがあります。この問題が発生するのは、NLS_LANG環境変数が設定されている場合のみです。

新規の日時データ型へのアクセスは、JDK 1.2、1.3および1.4を使用する3つのJDBCドライバすべてでサポートされます。これらの日時データ型は、TIMESTAMP、TIMESTAMPTZおよびTIMESTAMPLTZです。また、PreparedStatement.setString()やResultset.getString()などのString APIは、これらのデータ型には機能しません。setTIMESTAMP*()およびgetTIMESTAMP*()を使用する必要があります。

Bug#2171766(リリース9.2.0以降)

SQLメソッドのコールを含むJDBCコードを記述する場合に、" ?.method(args,...) "構文を使用すると、「ORA-01036: 変数の名前/数が無効です。」というSQLエラー・メッセージが表示されます。このメッセージは誤解を招く可能性があります。この問題を回避するには、?に続けて" "(空白)を指定する必要があります。

Bug#2165794(リリース9.2.0以降)

TMSUSPENDおよびTMRESUME機能を使用する必要のあるDBC XAアプリケーションでは、TMNOMIGRATE FLAGを使用する必要があります。このフラグを使用しないと、アプリケーションに「ORA-01002: フェッチ順序が無効です。」というエラーが戻されることがあります。

Bug#2158394(リリース9.2.0以降)

java.sql.Types.CHARでsetNull()メソッドを使用してストアド・プロシージャ経由でCHAR列にNULLを設定すると、ORA-06505エラーが発生します。java.sql.Types.VARCHARは使用できます。この問題が発生するのは、ThinドライバとJA16SJISまたはJA16EUCキャラクタ・セットの場合のみです。

Bug#2148328(リリース9.2.0以降)

Linuxの場合、表の名前に含まれるSJISデータは、ThinドライバでもOCIドライバでもJDK 1.2およびJDK 1.3を使用して置換文字として戻されます。これはJDKの不具合によるものです。回避策は、この不具合がないJDK 1.1.8を使用することです。

Bug#2144602(リリース8.1.7以降)

ロケールを中国語(繁体字)に設定し、キャラクタ・セットをZHT16DBTに設定してWindows 2000を実行すると、すべての中国語文字が"?"として表示されます。

Bug#2130384(リリース9.0.1以降)

setARRAYを使用してVARRAYに挿入する要素値が大きすぎる場合などのように、ORA-22814が発生しません。

Bug#2249191

サーバー側内部ドライバでは、問合せのタイムアウトを設定しても機能しません(タイムアウトになりません)。問合せが永続的に実行されていても、タイムアウトになった場合に問合せの実行は取り消されません。 さらに、問合せが戻った後で、コードの実行がタイムアウト期間だけ一時停止することがあります。

Bug#2213820

シリアライズできないメンバーがあるため、OracleConnectionCacheImplはシリアライズできません。このため、セッションの有効範囲内で接続キャッシュをBeanとして格納するJSPに問題が発生します。

Bug#2180673

OracleOCIConnectionPoolを使用すると、getPoolSizeおよびgetActiveSizeメソッドは不正な結果を戻します。getPoolSizeは常にminLimitを戻し、getActiveSizeは常に0(ゼロ)を戻します。

Bug#1910217

TIMESTAMPはADTではサポートされません。

Bug#2245502

Thinドライバを使用してリリース8.1.7のデータベースに接続し、バインド変数を使用してDBLink経由でリリース7.3.4のデータベースにアクセスしようとすると、バインド変数の値がスワップされることがあります。

Bug#2183691

更新可能な結果セットに対してinsertRowメソッドを実行すると、行はデータベースに挿入されますが、結果セット自体には挿入されません。

Bug#2095829

サーバー側内部ドライバでは、PL/SQLプロシージャをコールし、ユーザー定義型の引数にNULL値を渡すと失敗します。
セッションが停止する場合と、ORA-03113、ORA-03114またはORA-24323が戻される場合があります。

Bug#1568923

OCIドライバを使用する場合に、setBytesを使用してLONG RAWに50KBを超えるデータを挿入すると、挿入後の値が切り捨てられます。