Oracle JDBCに関するよくある質問(FAQ)

このFAQには、オラクルのJDBCドライバに関するよくある質問(FAQ)とその回答が含まれています。このFAQでは、特定の技術的な質問のみを扱い、既知の問題についても説明しています。これらの機能の詳細およびアプリケーションでの使用方法については、『JDBC開発者ガイド』およびJDBCのJavadocを参照してください。


よくある質問

    • 26aiの新機能
    • Java開発者用のドキュメントに関連するOracle Database Cloud Serviceの有無

JDBCの概要

    • JDBCとは何ですか。
    • JDBCの詳細はどこから入手できますか。
    • Javaの詳細はどこから入手できますか。

リリース固有の質問

    • どのバージョンのJDBCドライバがサポートされていますか。

リリース

利用開始(GA)日

Premier Supportの期限

Extended Supportの期限

Sustaining Supportの期限

26AI 2026年1月
  • 2031年12月
2031年12月 無期限
21c (Innovation Release) 2021年8月 2027年7月 設定なし 無期限
19c (長期サポート・リリース) 2019年4月 2029年12月(ライフタイム・サポート・ポリシーを参照) 2032年12月 無期限
18c 2018年7月 2021年6月 設定なし 無期限
12.2 2017年3月 2020年11月30日(制限付きエラー修正期間: 12.2.0.1 - 2020年12月1日~2022年3月31日) 設定なし 無期限
EE 12.1 2013年6月 2018年7月 2021年7月 無期限

    • JDBCとRDBMSの相互運用性マトリックスまたは認証マトリックスとはどのようになっていますか。

相互運用性マトリックス

Database 23.x

Database 21.x

Database 19.x

Database 18.3

Database 12.2 および 12.1

JDBC 23.x はい はい はい なし なし
JDBC 21.x はい はい はい あり あり
JDBC 19.x はい はい はい あり あり
JDBC 18.x なし あり あり あり あり
JDBC 12.2 and 12.1 なし あり あり あり あり

    • Oracle JDBCのリリースとJDKのバージョンの関連について教えてください。

Oracle Databaseのバージョン

リリース固有のJDBC jarファイル

23.x

ojdbc17.jar(JDK17、JDK19、JDK21、およびJakarta APIをサポートするJDK25用)


ojdbc11.jar(JDK11、JDK21用)


ojdbc8.jar (JDK8、JDK11)

21.x

ojdbc11.jar(JDK11、JDK17、JDK19、JDK21用)


ojdbc8.jar (JDK8、JDK11)

19.x

ojdbc10.jar(JDK11、JDK17、JDK19、およびJDK21(19.25以降)用)


ojdbc8.jar(JDK8、JDK11、JDK17、JDK19、およびJDK21(19.25以降)用)

18.x ojdbc8.jar (JDK8、JDK11)
12.2 または12cR2 ojdbc8.jar(JDK 8用)
12.1 または12cR1

ojdbc7.jar(JDK 7、JDK 8用)


ojdbc6.jar(JDK 6用)

11.2 または11gR2

ojdbc6.jar(JDK 6、JDK 7、JDK 8用)


(注意: JDK7およびJDK8は、11.2.0.3および11.2.0.4でのみサポートされます)


ojdbc5.jar(JDK 5用)

    • Oracle JDBCのリリースとJDKの仕様の関連について教えてください。

Oracle Databaseのバージョン

JDBC仕様の準拠

23.xおよび21.x

ojdbc11.jarのJDBC 4.3


ojdbc8.jarのJDBC 4.2

19.x

ojdbc10.jarのJDBC 4.3


ojdbc8.jarのJDBC 4.2

18.3 ojdbc8.jarのJDBC 4.2
12.2 または12cR2 ojdbc8.jarのJDBC 4.2
12.1 または12cR1

ojdbc7.jarのJDBC 4.1


ojdbc6.jarのJDBC 4.0

11.2 または11gR2

ojdbc6.jarのJDBC 4.0


ojdbc5.jarのJDBC 3.0

その他のリリース固有の質問

    • Oracle JDBCドライバはOpenJDKに対して認証されていますか。
    • JDK11とともに使用する推奨の19.x JDBCドライバを教えてください。
    • 上の表に記載されていないJDBCバージョンについて教えてください。
    • JDBC jarファイルはどこから入手できますか。
    • 19.x JDBCドライバのダウンロード・ページにある複数のJARファイルの違いについて教えてください。

Oracle JDBCの概要

    • オラクルが提供するJDBCドライバにはどのようなものがありますか。
    • どのドライバを使用すればよいですか。
    • サーバーThinドライバおよびサーバー内部ドライバ用のjarファイルについて教えてください。
    • サード・パーティ・ベンダーは、Oracle JDBCドライバと自社のソフトウェアを同時に配信できますか。
    • Oracle JDBCドライバが必要とするのはどの権限ですか。

インストール

    • Thinドライバをインストールするにはどうすればよいですか。
    • OCIドライバをインストールするにはどうすればよいですか。
    • サーバー・ドライバにサーバー側内部ドライバまたはThinドライバをインストールするにはどうすればよいですか。

DriverManagerおよびDataSource

    • DriverManagerとDataSourceの違いについて教えてください。
    • どの接続プールを使用すればよいですか。
    • JDBC OCI接続プーリングとは何ですか。

接続

    • URLの形式について教えてください。
    • 記述の形式について教えてください。
    • プロパティの引数はどのように使用すればよいですか。
    • クラスOracleDriverをDriverManagerに登録しなくてもよいですか。
    • サーバー内部ドライバに接続する際には、どのユーザー名とパスワードを使用すればよいですか。
    • デフォルトのプリフェッチ値を大きく設定すると、OutofMemoryエラーが発生します。どうすればよいですか。
    • サービス接続文字列とは何ですか。
    • SYSDBAまたはSYSOPERとして接続するにはどうすればよいですか。
    • Oracle JDBCドライバでは、どのような暗号化方法がサポートされていますか。
    • JDBC Thinドライバで暗号化とチェックサムを有効にするにはどうすればよいですか。
    • プロキシ認証とは何ですか。
    • Oracle JDBCドライバではSSLはサポートされていますか。
    • Oracle JDBCドライバでは接続URLでLDAPはサポートされていますか。
    • JDBCを使用して、ファイアウォールの後方にあるデータベース・サーバーに接続するにはどうすればよいですか。
  • Statement、PreparedStatement、CallableStatement

    • defineColumnTypeとは何ですか。どのような場合に使用すればよいですか。
    • defineColumnTypeはサーバーで強制的に変換されますか。
    • アプリケーション・コードでstmt.setEscapeProcessing(false)をコールするのではなく、JDBCドライバ・レベルでEscapeProcessingを無効にするにはどうすればよいですか。
    • Oracle JDBCドライバでは、名前によるバインド機能は提供されていますか。
    • Oracle JDBCドライバでは、PreparedStatementのsetXXXメソッドでどのようにしてデータ型が特定されますか。
    • ターゲット・パラメータの型がsetXXXメソッドで前提とした型と同じではない場合、どうなりますか。
    • ドライバによりクライアント側で変換が実行されないのはなぜですか。
    • バイト・データを表の列に挿入する場合、データ型は何ですか。
    • 文字データを表の列に挿入する場合、データ型は何ですか。
    • setString、setCharacterStream、setAsciiStreamのサイズはどれくらいですか。また、setBytesとsetBinaryStreamを介したバイナリ・データのサイズ制限はどれくらいですか。

形式

Stmt

ドライバ

下限

上限

バインド・メカニズム

すべて すべて すべて 0 0 null
すべて SQL クライアント 1文字 32,766文字 直販
すべて SQL クライアント 32,767文字 2,147,483,647バイト ストリーム
すべて SQL クライアント 2,147,483,648バイト 2,147,483,647文字

一時CLOB


CHAR  
サーバー 1文字 65,536バイト

直販


1, 2


NCHAR  
 
1文字 4,000バイト

直販


NCHAR  
 
4,001バイト 2,147,483,647文字

一時CLOB


CHAR  
 
65,537バイト 2,147,483,647文字

ストリーム


 
 
 
2,147,483,647バイト 2,147,483,647文字

一時CLOB


すべて PL/SQL すべて 1文字 32,512文字 直販  
すべて PL/SQL すべて 32,512文字 2,147,483,647文字 一時CLOB

    • oracle.jdbc.OraclePreparedStatementにおける独自のメソッドsetBytesForBlob、setStringForClobのサイズ制限はどれくらいですか。

API

FORM

Stmt

ドライバ

下限

上限

バインド・メカニズム

注意

setBytesForBlob

なし


すべて すべて

0


0


null
 
 
すべて クライアント 1バイト

2,000バイト


直販
 
 
すべて クライアント 2,001バイト 21,474,836,487バイト 一時BLOB 2
setStringForClob

すべて


すべて すべて 0 0 null  
 

すべて


すべて クライアント 1文字 32,766文字 直販  
 

すべて


すべて クライアント 32,766文字 2,147,483,647文字 一時CLOB  
 

すべて


すべて サーバー 1文字 4,000バイト 直販  
 

すべて


すべて サーバー 4,001バイト 2,147,483,647文字 一時CLOB 1

    • スイッチング・バインドのタイプにより、サーバー側における追加の文解析が強制的に実行されますか。
    • IN OUTパラメータを指定したCallableStatementsとプロシージャについて教えてください。
    • バインド・タイプを変更すると、多様性を持ったPL/SQLプロシージャの選択肢は変更されますか。
    • 既存のコードについて教えてください。
    • 一部のケースでは、ドライバが一時LOBを作成します。この場合、ドライバはこれらのLOBを追跡して解放しますか。
    • UTF8のような可変幅のキャラクタ・セットを使用しています。ドライバにより、文字列の実際のバイト長は修正されますか。
    • 巨大な文字列に対して、たとえばsetStringを使用するのは適切ですか。
    • LONG RAWおよびLONG列タイプは非推奨です。この場合、setXXXStream APIを新しく使用するのはなぜですか。
    • LOB APIは非常に柔軟性が高いというのは正しいですか。
    • select * from tab where id in (?, ?, ?, ...)を実行するPreparedStatementを作成できないのはなぜですか。

ResultSets

    • "Exhausted Resultset: prepare_for_new_get"とはどういう意味ですか。
    • ResultSetをクローズする必要があるのはなぜですか。

単純なデータ型

    • DATEおよびTIMESTAMPの現在の状況について教えてください。
    • バインドできる最長値はどれくらいですか。

メソッド

列タイプ

最大長

setBytes LONG

4,000バイト


setBytes LONG RAW

2ギガバイト


setString LONG

32,000文字SetBigStringTryClob="false"
4,000文字SetBigStringTryClob="true"


setString

CLOB


20億文字


    • TIMESTAMP WITH TIME ZONEの読取り結果が異なるのはなぜですか。

高度なデータ型(オブジェクト)

    • ADTのインスタンスはどのようにして作成すればよいですか。
    • 標準のファクトリ・メソッドcreateArrayOfがサポートされていないのはなぜですか。

BFILE、BLOB、CLOB

    • DBMS_LOB.ERASEが実行する処理は何ですか。
    • oracle.sql.CLOB.putChars()は使用できますか。
    • OCIには、CLOB CharSetIdを操作する機能が備えられています。JDBCと同等なものは何ですか。
    • BLOBへの書込みはLONG RAWの挿入より遅いですか。
    • Streamサンプル・コードでLobLengthを取得した際に、ORA-03127エラーが表示されるのはなぜですか。
    • データベースからCLOBを取得して更新した際、データベースに変更内容が表示されないことがあります。なぜでしょうか?

REF型

    • 2つの異なるJDBCクライアント(EJB、JDBCクライアントなど)間でoracle.sql.REFを渡すには、どうすればよいですか。この際、REFクラスはシリアライズ可能ではないですか。
    • 新しいREFを作成するにはどうすればよいですか。

OPAQUE型

    • OPAQUE型とは何ですか。

Row Sources

    • 実行後にスクロール可能性属性を設定しましたが、RowSetのスクロール可能性に反映されません。なぜでしょうか?
    • RowSetにストリームが含まれている場合でも、RowSetオブジェクトをフラット・ファイルにシリアライズできますか。

Thinドライバ

    • Javaアプリケーションの開発にJDBC Thinドライバは使用できますか。

サーバー内部ドライバ

    • サーバー内部ドライバはいつ使用すればよいですか。

サーバーThinドライバ

    • サーバーThinドライバはいつ使用すればよいですか。

エラー

    • DriverManager.getConnectionで、"適切なドライバがありません"というエラーが出ます。
    • エラー・メッセージ:"UnsatisfiedLinkError with OCI driver"
    • エラー・メッセージ:"ORA-1019: unable to allocate memory."
    • エラー・メッセージ:"ORA-01000: maximum open cursors exceeded"
    • エラー・メッセージ:"ORA-01002: fetch out of sequence"
    • エラー・メッセージ:"ORA-12705: invalid or unknown NLS parameter value specified"
    • エラーORA-12705でテキストを取得し直そうとしているときに表示されるエラー
    • エラー・メッセージ:JDBC ThinドライバでUnicodeのリテラルに"invalid character"エラーが発生する
    • INSERTまたはUPDATEのオペレーションが遅い
    • エラー・メッセージ:"Connection reset by peer"
    • "Protocol Violation"とはどのような意味ですか。

デモ・プログラム

    • JDBCのデモ・プログラムはありますか。
    • デモの実行方法を教えてください。
    • デモ実行時にエラーが発生した場合はどうすればよいですか。

Oracle JDBCトレース機能

    • JDBCトレース機能とは何ですか。
    • 古いJDBCトレース機能を有効にする方法を教えてください。
    • トレース出力量の制御方法を教えてください。
    • トレース情報の出力先はどこですか。
    • DMS対応jarでDMSを無効にする方法を教えてください。

開発ツールと環境

    • JDBCプログラムはSymantec Visual Cafeでデバッグできますか。
    • JDBCプログラムはMicrosoft Visual J++でデバッグできますか。

サポートされる機能

    • JDBCドライバはPL/SQLストアド・プロシージャにアクセスできますか。
    • JDBCドライバではストリーミングはサポートされていますか。
    • JDBCドライバではマルチバイト・キャラクタ・セットはサポートされていますか。
    • JDBCドライバはファイアウォールとともに動作しますか。
    • Oracle JDBCドライバではPL/SQL表/結果セット/レコード/ブールはサポートされていますか。
    • フェイルオーバーはサポートされていますか。
    • JDBCドライバによるOracle ROWIDデータ型のサポート方法を教えてください。このことは、getCursorNameおよびsetCursorNameとどのように関係しているのですか。
    • JDBCドライバによるOracle REFCURSORデータ型のサポート方法を教えてください。
    • ANOはJDBCドライバとともに動作しますか。
    • oracle.sql.*データ型はシリアライズできますか。
    • JDBCドライバではオブジェクトまたはコレクションはサポートされていますか。
    • WaitOptionおよびAutoRollbackは使用できますか。
    • 1つのデータベース・インスタンスのJavaストアド・プロシージャにより、別のデータベース・インスタンスへの接続をオープンできますか。

パフォーマンス

    • より高速なのは、ThinドライバとOCIドライバのどちらですか。
    • より高速なのは、StatementとPreparedStatementのどちらですか。

java.util.logging

    • java.util.loggingを使用して、Oracle JDBCドライバのトレース出力を取得する方法を教えてください。
    • java.util.loggingを構成して、Oracle JDBCの有効なトレース出力を取得する方法を教えてください。
    • サーバー側内部ドライバについて教えてください。