| Oracle Databaseプラットフォーム共通日本語README 11gリリース1(11.1) E05740-05 |
|
![]() 戻る |
![]() 次へ |
原典情報: $ORACLE_HOME\relnotes\readmes\README_jdbc.txt
目次
ThinドライバおよびOCIドライバでは、新しいJDBC仕様であるJDBC 4.0を含め、JSE 6(AKA Mustang)がサポートされています。このリリースでは、新しいjava.sql.SQLXMLタイプはサポートされていません。JSE 6は、Oracle JDBCの新しいjarファイルであるojdbc6.jar、ojdbc6_g.jar、ojdbc6dms.jarおよびojdbc6dms_g.jarでサポートされています。このリリースは、JSE 6の製品リリースに準拠しています。
J2SE 5.0およびJDBC 3.0は、このリリースに含まれているその他のjarで完全にサポートされています。サーバー側内部ドライバおよびサーバー・ドライバのThinドライバでサポートされているのは、J2SE 5/ JDK 1.5のみです。
Oracle JDBCドライバの初期リリースでは、パッケージoracle.jdbc.driverに定義されているクラスの使用が推奨されていました。このことは、ユーザーにもオラクル社にも問題となっていました。Oracle JDBCリリース9.0.1で、そのパッケージのクラスの使用が廃止されました。新規パッケージoracle.jdbcが導入され、oracle.jdbcに定義されているインタフェースやクラスの使用が推奨されました。9.0.1以降のすべてのリリースで、oracle.jdbcに切り替えることを推奨し、oracle.jdbc.driverのサポートが廃止されることをお伝えしてきました。ついに、サポートは廃止されることになりました。oracle.jdbc.driverを参照する顧客コードは、Oracle JDBCドライバのこれ以降のリリースでは、コンパイルすることも実行することもできなくなります。かわりに、oracle.jdbcを使用してください。
oracle.jdbcに同じ名前のタイプがないoracle.jdbc.driverのクラスを使用している場合、ユーザーによるそのクラスの使用はサポートされないため、別の解決策を見つける必要があります。唯一の例外はoracle.jdbc.driver.OracleLogです。このクラスは、デバッグ目的で参照できます。その場合でも、Oracle JDBCの診断可能なMBeanをかわりに使用することをお薦めします。詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。
Oracle 11R1では、J2SE 1.2、1.3および1.4はサポートされていません。これらのバージョンのJ2SEをサポートする.zipおよび.jarファイルは、Oracle JDBC 11R1には含まれていません。J2SE 1.2、1.3または1.4を使用している場合は、それらのバージョンのJavaでOracle JDBC 10.2.0.1.0の使用を続行できます。10gR2は、それらのバージョンのJavaを使用できるよう完全にサポートされています。Oracle JDBC 11R1を使用する場合は、J2SE 5.0以上を使用する必要があります。
Oracle JDBC 11R1 Thinドライバでは、AES暗号化アルゴリズム、SHA1ハッシュ・アルゴリズム、RADIUS、KERBEROSおよびSSL認証メカニズムがサポートされています。
JDBC Thinドライバで、TLS_RSA_WITH_AES_128_CBC_SHAおよびTLS_RSA_WITH_AES_256_CBC_SHA暗号化を使用できるようになりました。
ANYDATAおよびANYTYPE SQL型は、Oracle 9iで導入されました。Oracle JDBC 11R1より前には、これらの型を操作するには、JavaプログラマはPL/SQLを使用する必要がありました。Oracle JDBC 11R1には、これらの型を使用するためのJavaインタフェースが用意されています。詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。
Oracle JDBC 11R1には、AQ(Oracle Advanced Queueing)にアクセスするための高パフォーマンスな新しいインタフェースが用意されています。この新しいインタフェースは、既存のPL/SQLベースのインタフェースより高速かつ機能的で、ANYDATA、ANYTYPE、ANYDATASET型の新しいサポートを利用しています。
対象の表または問合せを識別し、そのいずれかが変更されるたびに通知を受信する機能であるデータベース変更通知は、Oracle Database 9iで導入されました。Oracle JDBC 11R1には、この強力な機能のネイティブJavaサポートが用意されています。データ・キャッシュを使用している開発者は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を入手して、データベース変更通知がどのように機能するかを理解する必要があります。失効したデータのコストが高すぎるためにデータ・キャッシュを使用していない場合は、DCNを使用するとキャッシュが可能になります。
Oracle JDBC 11R1には、Oracle Databaseの起動と停止を行うためのメソッドが用意されています。
java.sql.ConnectionのJDBC 4.0仕様には、標準のJDBCタイプ、Array、BLOB、CLOBなどのインスタンスを作成するためのファクトリ・メソッドが含まれています。このコンセプトに基づいて構築されているため、Oracle JDBC 11R1のoracle.jdbc.OracleConnectionには、Oracle固有タイプのインスタンスを作成するためのファクトリ・メソッドが用意されています。標準のJDBCタイプおよび新しいファクトリ・メソッドを使用することをお薦めします。Oracle固有タイプを使用する必要がある場合は、新しいファクトリ・メソッドを使用してそれらを作成することをお薦めします。これらのタイプのコンストラクタへのユーザーによる直接アクセスは廃止され、今後サポートされなくなります。サポートされているタイプは、ARRAY、BFILE、DATE、INTERVALDS、NUMBER、STRUCT、TIME、TIMESTAMPなどを含め、すべてoracle.sqlに含まれています。
10gR1では、特に文のキャッシュ(推奨)を使用している場合にメモリー・フットプリントが増加するのを承知の上で、パフォーマンスを向上するためにドライバを再構築しました。パフォーマンスは向上しましたが、メモリー・フットプリントが増加すると問題があることがわかりました。11R1リリースでは、パフォーマンスの向上内容はすべてそのままで、文のキャッシュを使用する際のメモリー・フットプリントが大幅に削減されました。使用していない場合には文をクローズすることをお薦めします。キャッシュに文を戻し、キャッシュから取得するコストはごくわずかです。オープンされている各文には、かなりのメモリー・フットプリントがあります。クローズされた文のフットプリントはごくわずかです。文のキャッシュを使用する際に使用していない文をクローズすると、メモリー・フットプリントが減少するため、実際にパフォーマンスが向上することがテストで実証されました。
11R1リリースには、次のドライバ・バージョンがあります。
クライアント・アプリケーション、中間層サーバーおよびアプレット用の100% Javaクライアント側JDBCドライバ。
OCI 11R1がインストールされているマシン用のクライアント側JDBCドライバ。
リモートOracleデータベースにアクセスするデータベース内のJavaプログラム用のJDBCドライバ。
Javaストアド・プロシージャ用のサーバー側JDBCドライバ。このドライバはJDBC Kprbドライバと呼ばれていました。
詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。
[ORACLE_HOME]/jdbc/libには、次のファイルが含まれています。
JDK 1.5用のクラス。OracleのObject型およびCollection型によるNLSサポート用のクラスを除く、JDBCドライバ・クラスが含まれています。
ojdbc5.jarと同じですが、クラスはjavac -gを使用してコンパイル済で、トレース・コードが含まれています。
ojdbc5.jarと同じですが、DMSおよび制限付きjava.util.loggingコールをサポートするためのインスツルメンテーションが含まれています。
ojdbc5_g.jarと同じですが、DMSをサポートするためのインスツルメンテーションが含まれています。
JDK 1.6用のクラス。OracleのObject型およびCollection型によるNLSサポート用のクラスを除く、JDBCドライバ・クラスが含まれています。
ojdbc6.jarと同じですが、javac -gを使用してコンパイルされ、トレース・コードが含まれています。
ojdbc6.jarと同じですが、DMSおよび制限付きjava.util.loggingコールをサポートするためのインスツルメンテーションが含まれています。
ojdbc6_g.jarと同じですが、DMSをサポートするためのインスツルメンテーションが含まれています。
|
注意: jarファイルのdmsバージョンは標準のjarファイルと同じですが、Oracle Dynamic Monitoring Serviceをサポートするための追加コードが含まれています。含まれるトレース・コードの量は制限されています。dms.jarがCLASSPATHにある場合のみ使用できます。dms.jarは、Oracle Application Serverのリリースに含まれて提供されています。そのため、jarファイルのdmsバージョンを使用できるのは、Oracle Application Server環境のみです。 |
[ORACLE_HOME]/jdbc/doc/javadoc.tarには、Oracle JDBCのパブリック・クラスのパブリックAPIに関するJDBC Javadocが含まれています。このJavaDocは、Oracle JDBC API拡張機能の主要な参照ドキュメントです。『Oracle Database JDBC開発者ガイドおよびリファレンス』には、Oracleの拡張機能に関する高度な説明が記載されています。詳細はこのJavaDocに記載されています。JavaDocは、開発ガイドと同様に正式なドキュメントです。
[ORACLE_HOME]/jdbc/demo/demo.tarには、JDBCのサンプル・プログラムが含まれています。
JDK 1.5および1.6用のNLSクラス。OracleのObject型とCollection型によるNLSサポート用のクラスが含まれています。
このjarファイルにより、古いnls_charset jar/zipファイルが置き換えられます。Oracle 10gリリース1(10.1)では、このファイルは[ORACLE_HOME]/jdbc/libにも重複して存在しました。この重複したコピーは削除されたため、前述の位置からこのファイルを取得する必要があります。
[ORACLE_HOME]\binディレクトリには、JDBC OCIドライバ用ライブラリocijdbc11.dllおよびheteroxa11.dllがあります。
[ORACLE_HOME]/libディレクトリには、JDBC OCIドライバ用の共有ライブラリlibocijdbc11.so、libocijdbc11_g.so、libheteroxa11.soおよびlibheteroxa11_g.soがあります。
サーバー側内部JDBCドライバは完全なNLSサポートを提供します。NLS拡張機能のjarファイルは不要です。この項の説明は、Oracle JDBC ThinドライバとOracle JDBC OCIドライバにのみ適用されます。
基本のjarファイル(ojdbc5.jarおよびojdbc6.jar)には、次のように完全なNLSサポートの提供に必要なクラスがすべて含まれています。
OracleのObject型またはCollection型のデータ・メンバーとして取得または挿入されないCHAR/VARCHAR/LONGVARCHAR/CLOB型データ用のOracleキャラクタ・セット。
共通に使用される少数のキャラクタ・セット用のObject型とCollection型のCHAR/VARCHARデータ・メンバーに対するNLSサポート。この種のキャラクタ・セットは、US7ASCII、WE8DEC、WE8ISO8859P1、WE8MSWIN1252およびUTF8です。
Object型またはCollection型のCHAR/VARCHARデータ・メンバーに他のキャラクタ・セットを使用する必要がある場合は、CLASSPATHにNLS拡張機能のjarファイル([ORACLE_HOME]/jlib/orai18n.jar)を含める必要があります。新規のorai18n.jarにより、9i以前のリリースのnls_charset*.*ファイルが置き換えられます。
ファイルorai18n.jarには、文字に関連する重要なファイルが多く含まれています。これらのほとんどのファイルは、グローバリゼーション・サポートのために必要です。アプリケーションで使用するキャラクタ・セット・ファイルのみを抽出するのではなく、次の3つの手順に従うことが最も安全です。
orai18n.jarを一時ディレクトリに解凍します。
アプリケーションで使用しないキャラクタ・セット・ファイルを削除します。地域ファイル、照合順番ファイルまたはマッピング・ファイルは削除しないでください。
一時ディレクトリで新しいorai18n.jarファイルを作成し、変更したファイルをCLASSPATHに追加します。
詳細は、JDBCの開発者ガイドを参照してください。
また、各国対応のJDBCエラー・メッセージ・ファイルを選択的に含めることもできます。メッセージ・ファイルは、ojdbc5*.jarおよびojdbc6*.jar内のoracle/jdbc/driver/Messages_*.propertiesファイルに含まれています。
CLASSPATHには、Oracle JDBC Driversの複数バージョンを指定しないでください。Oracle Installerを実行すると、Oracle JDBC Driversが[ORACLE_HOME]/jdbcディレクトリにインストールされます。
JDK 1.5を使用する場合は[ORACLE_HOME]\jdbc\lib\ojdbc5.jarを、JDK 1.6を使用する場合は[ORACLE_HOME]\jdbc\lib\ojdbc6.jarをCLASSPATHに追加します。
必要な場合は、CLASSPATHに[ORACLE_HOME]\jlib\orai18n.jarを追加します。
JDBC OCIドライバを使用する場合は、PATHに[ORACLE_HOME]\binを追加します。
JDK 1.5を使用する場合は[ORACLE_HOME]/jdbc/lib/ojdbc5.jarを、JDK 1.6を使用する場合は[ORACLE_HOME]/jdbc/lib/ojdbc6.jarをCLASSPATHに追加します。
必要な場合は、CLASSPATHに[ORACLE_HOME]/jlib/orai18n.jarを追加します。
JDBC OCIドライバを使用する場合は、LD_LIBRARY_PATHに[ORACLE_HOME]/jdbc/libを追加します。
JDK 1.5を使用する場合は[ORACLE_HOME]/jdbc/lib/ojdbc5.jarを、JDK 1.6を使用する場合は[ORACLE_HOME]/jdbc/lib/ojdbc6.jarをCLASSPATHに追加します。
必要な場合は、CLASSPATHに[ORACLE_HOME]/jlib/orai18n.jarを追加します。
JDBC OCIドライバを使用する場合は、SHLIB_PATHおよびLD_LIBRARY_PATHに[ORACLE_HOME]/jdbc/libを追加します。
JDK 1.5を使用する場合は[ORACLE_HOME]/jdbc/lib/ojdbc5.jarを、JDK 1.6を使用する場合は[ORACLE_HOME]/jdbc/lib/ojdbc6.jarをCLASSPATHに追加します。
必要な場合は、CLASSPATHに[ORACLE_HOME]/jlib/orai18n.jarを追加します。
JDBC OCIドライバを使用する場合は、LIBPATHおよびLD_LIBRARY_PATHに[ORACLE_HOME]/jdbc/libを追加します。
Oracle JDBC Driversの使用方法の詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』、およびdemo/doc/javadoc.tarにあるOracle JDBC JavaDocを参照してください。この項では、ヒントのみを説明します。これらのヒントは網羅的ではありません。
あくまでもJDBCプログラムで必要な事項です。
JDBCを使用するプログラムに必要なJDBCクラスをインポートします。次に例を示します。
import java.sql.*; import java.math.*; // if needed
OracleDataSourceを使用するには、次のように入力する必要があります。
import oracle.jdbc.pool.OracleDataSource;
OracleDataSourceインスタンスを作成します。
OracleDataSource ods = new OracleDataSource();
デフォルトのプロパティを使用しない場合は、必要なプロパティを設定します。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の名前/値ペア、またはTNSEntryNameです。
サーバー側JDBC内部ドライバの場合
ods.setURL("jdbc:oracle:kprb:");
後続の「:」が必要であることに注意してください。サーバー側内部ドライバを使用する場合は、常に実行中のデータベースに接続します。また、次のように指定できます。
Connection conn = new oracle.jdbc.OracleDriver().defaultConnection();
OracleDataSourceクラスに定義されているgetConnection()メソッドを使用して、データベースへの接続をオープンします。
Connection conn = ods.getConnection();
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 11R1で廃止されました。古いoracle.jdbc.driverパッケージを使用する既存のアプリケーションが残っている場合は、Oracle JDBC 11R1を使用するように変換する必要があります。
ソース内でoracle.jdbc.driverをoracle.jdbcで置き換えて再コンパイルするだけで、コードを変換できます。この操作は、ピース単位では実行できません。アプリケーションで参照されるクラスとインタフェースをすべて変換する必要があります。oracle.jdbcに同じ名前のタイプがないoracle.jdbc.driverのクラスまたはメソッドをアプリケーションが参照している場合、そのタイプまたはメソッドはユーザー向けに作成されたものではなく、別の解決策を見つける必要があります。
OracleのObjectを使用したコールインとインスタンス・メソッドの例は、次のファイルにあります。
[ORACLE_HOME]/javavm/demo/demo.zip
このファイルを解凍すると、次のディレクトリに例が抽出されます。
[ORACLE_HOME]/javavm/demo/examples/jsp
Thinドライバは、AL32UTF8のデータベースで、OracleResultSet.getString()の無効な文字に対してNullPointerExceoptionをスローします。
パスワードが個別に指定されていると、Thinドライバのプロキシ認証が失敗します。
バッチの実行時、getUpdateCountで不正な値が戻されます。
AL16UTF16からUTF16への変換で、サロゲート文字が区別されます。
カーソルとしてフェッチされた場合、thinとociではisBeforeFirstの動作が異なります。
JDBC Thinで、IOExceptionのソケットが閉じられません。
CachedRowsetを使用して挿入されたNullは、再度選択しないと削除できません。
9i以降、日付コンポーネントを01-Jan-1900に設定するために使用される挿入操作で、データベースにTime値をバインドすると、メソッドjava.sql.Time().getTime()により日付コンポーネントが切り捨てられません。
ただし、JDBCの再構築中、10gではこの動作が変更され、日付コンポーネントはリセットされませんでした。これにより、9iのユーザーに回帰が発生していました。
デフォルトで値を01-Jan-1900にリセットすると、これまで4年間フラグを使用してきた10gのユーザーに回帰が発生します。
そのため、ドライバにTimeの日付コンポーネントを01-Jan-1900に設定することを強制する新しい接続フラグoracle.jdbc.use1900AsYearForTimeが導入されました。このフラグのデフォルト値はfalseです。
妥当性を確認せずに、サーバーにユーザー入力が渡されます。
接続でORA-3113が発生すると、JDBCではユーザーが接続を閉じられなくなります。
バッチ・サイズが大きい場合、JDBCの使用中にArrayOutOfBoundsExceptionが発生します。
Null属性がバインドされた構造体の読取り中に、ORA-00600が発生します。
Nullの列に大量のメモリーが使用されます。
プールされた接続にセーブポイントを使用するとSQL例外が発生します。
checkErrorからのOCIドライバの使用中にNullPointerExceptionが発生します。
oracle.sql.Datumサブクラスのインスタンスをシリアライズすると、例外として表示されます。
ロード中に、JDBCドライバによりMalformedObjectExceptionまたはInstanceAlreadyExistsExceptionがスローされます。
データベースとの通信中に、JDBCメソッドNamespace.setAttributeのDMSバージョンによりNullPointerExceptionがスローされます。
DatabaseMetadata.getFunctionsにより戻される結果セットに、FUNCTION_TYPE列が含まれません。
JDBCドライバにより、大量のメモリーが消費されます。アプリケーションはOracle JDBCの暗黙的文キャッシュを使用します。このキャッシュには多数のオープン接続が含まれており、使用されるのは常に少数の接続のみです。その他すべての接続は使用されず、それらの接続内の文はすべてクローズされています。
パブリック・コール専用に構成されている場合でも、パブリックAPIを持つメッソドに対する4つのJDBC内部コールがトレース・ログに表示されます。
setIncludeSynonymsがtrueの場合、DatabaseMetaData.getColumnsに使用される問合せが非常に遅くなります。
ストリームに書き込まれたバッファのサイズがMB単位の場合、java.sql.Blob.setBinaryStreamから取得したストリームと、CLob.setCharacterStreamおよびsetAsciiStreamの使用が遅くなります。
DatabaseMetaData.getColumnsにより、シノニムのスキーマではなく、ターゲット表のスキーマが戻されます。
InputStreamsおよびReadersのバッファ・サイズは、サイズが32KBより大きいユーザー読取りコールのサイズに適合します。
コミット中に、ネットワークの使用およびRDBMSリソースが過剰になります。
OracleConnection.getEncryptionAlgorithmNameにより、接続でSSLの使用時に使用されていた暗号が戻されません。
orai18n.jarがクラスパスに含まれていない場合、AQ通知イベントで文字列が正しく処理されません。
PKCS12ウォレットを使用している場合は、OracleのPKIプロバイダを使用する必要があります。java.securityを使用して静的に有効化されている場合、Javaコードでインスタンス化する必要もあります。インスタンス化しないと使用できません。これは不具合で、ユーザー・コードではなくドライバによりインスタンス化する必要があります。
接続プロパティoracle.net.wallet_locationが適切に処理されません。
Thinドライバにより、正しいデータベース・バージョンが戻されません。
クライアントのタイムゾーンがセッションのタイムゾーンと異なる場合、夏時間の変更時期にタイムスタンプ値が不適切になります。
前述のOracle Bug#6749320と同様ですが、TIMESTAMP WITH LOCAL TIME ZONEも不適切になります。
取得されたタイムスタンプがセッションのタイムゾーンとオーバーラップする夏時間の場合、TIMESTAMPLTZの値が不適切になります。
夏時間の切替え時期に、取得された値を含むTIMESTAMPTZの値が不適切になります。
Thinドライバとの接続を確立する際、実際のエラー・コードがエラー・コード0でマスキングされます。
PreparedStatement.executeBatchのコール中、setQueryTimeoutが機能しません。
IOErrorが原因でoracle.jdbc.driver.ThrowSqlExceptionのNullPointerExceptionが発生します。
新しいパスワードに疑問符(?)が含まれる場合、パスワードを使用したALTER USERが失敗します。
setTypeMapにより変数が変更され、2つのエントリが追加されます。
この修正により、ドライバの動作が変更され、変数は取得ではなくコピーされます。一部のコードが機能しなくなります。新しい動作はJDBCの仕様に完全に準拠しており、ユーザー・コードを変更する必要があります。これは、ドライバにより変更が行われる場合、またはユーザー・コードによりgetTypeMapがコールされてマップが変更される場合を除き、ユーザー・コードによりsetTypeMapがコールされてマップが変更される場合に発生します。
ResultSetMetadata.getColumnTypeNameにより、TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONEが説明されません。
user.languageがsr(セルビア語)に設定されているとSQL例外が発生します。
DatabaseMetaData.getColumnsにより、NCHAR列に適切な長さが戻されません。
PrepraredStatement.executeBatchとともに使用すると、Statement.cancelが機能しません。
次のリストに、既知の問題または制限事項を示します。
ScrollableResultSetでADTデータに対してgetSTRUCT()をコールすると、NullpointerExceptionが発生することがあります。
クライアント側ドライバを使用して一度に16以上の接続をオープンしようとすると、プログラムが異常終了することがあります。これは、JDBCドライバによる制限事項ではありません。プロセスごとのファイル記述子数の制限を超えることが原因と思われます。この問題を解決するには、上限を高くします。
サーバー側内部ドライバには、次の制限事項があります。
LONG型とLONG RAW型は、PL/SQLプロシージャのパラメータが32512バイトに制限されます。Oracle Bug#5965340 SQLExceptionが連鎖する場合は、最初のSQLExceptionでのみgetSQLState値が戻ります。
Oracle 8のObject、REFおよびCollectionデータ型を使用したバッチ更新はサポートされません。
日時書式、通貨記号および小数点記号は、常にアメリカの表記規則で表されます。
妥当な変換のほとんどは機能しますが、すべてが機能するとはかぎりません。特に、新規LOBを作成する変換は機能しません。妥当と思われる変換が見つかっても機能しない場合は、OracleサポートにTARを提供してください。
JSPのSystem.out.println()を標準出力にリダイレクトするために使用するdbms_java.set_outputまたはdbms_java.set_streamユーティリティは、JDBCトレースがオンになっているときには使用しないでください。これは、dbms_java.set_outputおよびset_streamの現行の実装では、出力を標準出力に書き込むためにJDBCが使用されるためです。この種のユーティリティを使用すると無限ループになります。
JDBC OCIドライバとJDBC Thinドライバは、バイナリ・ストリームを介してCHARデータを正常に読み取りません。つまり、getBinaryStream()を使用してCHARデータを取得すると、正しい結果が得られないことがあります。回避策は、かわりにgetCHAR()またはgetAsciiStream()を使用することです。その他にgetUnicodeStream()を使用する方法もありますが、このメソッドは廃止になっています。
JavaおよびObject型で実装されるトリガーには制限があります。Javaメソッドとして実装されたトリガーは、Oracle 8のObject型またはCollection型のOUT引数を取ることができません。つまり、トリガーの実装に使用するJavaメソッドには、次の型の引数を使用できません。
java.sql.Struct
java.sql.Array
oracle.sql.STRUCT
oracle.sql.ARRAY
oracle.jdbc2.Struct
oracle.jdbc2.Array
oracle.jdbc2.SQLDataまたはoracle.sql.CustomDatumを実装するクラス
スクロール可能な結果セットの実装には、次の制限があります。
ScrollableResultSetに対するsetFetchDirection()は、何もしません。
ScrollableResultSetに対するrefreshRow()では、更新検出と同時実行性の組合せがすべてサポートされるわけではありません。次の表に、サポートされる組合せを示します。
| サポート | タイプ | 同時実行性 |
| なし | TYPE_FORWARD_ONLY | CONCUR_READ_ONLY |
| なし | TYPE_FORWARD_ONLY | CONCUR_UPDATABLE |
| なし | TYPE_SCROLL_INSENSITIVE | CONCUR_READ_ONLY |
| あり | TYPE_SCROLL_INSENSITIVE | CONCUR_UPDATABLE |
| あり | TYPE_SCROLL_SENSITIVE | CONCUR_READ_ONLY |
| あり | TYPE_SCROLL_SENSITIVE | CONCUR_UPDATABLE |
トリガーを作成する場合、PreparedStatementsの使用には制限があります。ドライバでは:fooをSQLパラメータとして認識するため、PreparedStatementの使用時に、トリガーを定義するSQLで:inおよび:outを使用できません。回避策は、かわりにStatementを使用することです。
Oracle Bug#2183691
更新可能な結果セットに対してinsertRowメソッドを実行すると、行はデータベースに挿入されますが、結果セット自体には挿入されません。
Oracle Bug#3207391
nativeXAをtrueに設定してOracleXADataSourceを使用するとき、JDBC type2(OCIドライバ)はマルチスレッド環境で機能しません。OCIドライバは、OracleのC/XAライブラリを使用して分散トランザクションをサポートします。分散トランザクションでは、グローバル・トランザクションの再開前にスレッドごとにXAConnectionの取得が必要です。
Oracle Bug#3209390
JDBC OCIドライバのTAF機能は、JDBCの高速接続フェイルオーバーとともに使用すると機能しません。この問題は、TAFが有効な場合、TAFによって実際に検出されフェイルオーバーされた接続がJDBCの高速接続フェイルオーバーによって削除されるために発生します。回避策はありません。TAFと高速接続フェイルオーバーは一緒に使用できません。
Oracle Bug#4176026
KPRBドライバは、データベースのLONG列から1MBのみ文字を取得する際に、余分に文字を取得します。この問題は、データベース・キャラクタ・セットがUTF8の場合に、OraclePreparedStatement.getCharacterStream()で発生します。
Oracle Bug#5940568
{ call spLengthTest(?, ?) }などのSQL文字列では、エスケープ形式が使用されている場合、4000を超える長さのVARCHAR OUT引数が不適切に切り捨てられます。begin spLengthTest(?, ?); end;のように、Oracle固有のPL/SQLブロックが使用されている場合には、適切に表示されます。
Oracle Bug#5701494
LONG列が続くTIMESTAMPLTZ列が結果セットに含まれている場合、LONG列を読み込むとエラーが発生します。
Oracle Bug#5976230
文で更新可能な結果セットを作成し、続いてaddBatchおよびexecuteBatchをコールすると、正しく結果セットがクローズされません。結果セットへの後続のアクセスで、データが破損する原因になります。
KPRBドライバは、OraclePreparedStatement.setCharacterStream()により、1つの文で32767バイト以上のデータをデータベースのLONG列に挿入した場合、および4KBをVARCHAR2列に挿入した場合に、ORA-01461をスローします。