ナビゲーションをスキップ

WebLogic JDBC プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

JDBC 接続のトラブルシューティング

以下の節では、JDBC 接続に関する一般的な問題について説明します。

 


UNIX での Oracle 関連の問題

使用するスレッディング モデルを確認してください。グリーン スレッドは、OCI で使用されるカーネル スレッドと衝突します。Oracle ドライバを使用する場合は、ネイティブ スレッドを使用することをお勧めします。ネイティブ スレッドの使用を指定するには、Java を起動するときに -native フラグを追加します。

 


UNIX でのスレッド関連の問題

UNIX では、グリーン スレッドとネイティブ スレッドという 2 つのスレッディング モデルを利用できます。詳細については、Sun の Web サイトで提供されている Solaris オペレーティング環境用の JDK を参照してください。

使用しているスレッドの種類は、THREADS_TYPE 環境変数を調べることで確認できます。この変数が設定されていない場合は、Java の bin ディレクトリにあるシェル スクリプトを調べてください。

一部の問題は、各オペレーティング システムの JVM でのスレッドの実装に関連しています。すべての JVM で、オペレーティング システム固有のスレッドの問題が等しく適切に処理されるわけではありません。以下に、スレッド関連の問題を防止するためのヒントを紹介します。

 


JDBC オブジェクトのクローズ

プログラムが効率的に実行されるように、ConnectionStatementResultSet などの JDBC オブジェクトは必ず finally ブロックでクローズすることをお勧めします。次に、一般的な例を示します。

try {
Driver d = 
(Driver)Class.forName("weblogic.jdbc.oci.Driver").newInstance();
Connection conn = d.connect("jdbc:weblogic:oracle:myserver",
"scott", "tiger");
    Statement stmt = conn.createStatement();
stmt.execute("select * from emp");
ResultSet rs = stmt.getResultSet();
// 処理を行う
    }
    catch (Exception e) {
      // 必要に応じて例外を処理する
    }
    finally {
      try {rs.close();}
catch (Exception rse) {}
try {stmt.close();}
catch (Exception sse) {}
try {conn.close();
catch (Exception cse) {}
    }

JDBC オブジェクトの破棄

また、次のような処理も行わないでください。破棄された JDBC オブジェクトが作成されます。

//このようには行わない
stmt.executeQuery();
rs = stmt.getResultSet();
//代わりに次のように行う
rs = stmt.executeQuery();

上記の例の最初の行では、破棄されており、すぐにガベージ コレクションが行われる可能性のある結果セットが作成されます。

 

ページの先頭 前 次