ヘッダーをスキップ
Oracle Database 2日でJava開発者ガイド
11g リリース2(11.2)
B56268-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 Oracle Databaseからの切断

JDeveloperでのデータベースからの切断は簡単な操作ですが、Javaアプリケーションでは単独のプロセスではありません。アプリケーションでは、ResultSetStatementおよびConnectionオブジェクトを使用した後、それらをすべて明示的にクローズする必要があります。Connectionオブジェクトをクローズすると、データベースから切断されます。closeメソッドによって、メモリーがクリーンアップされ、データベース・カーソルが解放されます。そのため、ResultSetおよびStatementオブジェクトを明示的にクローズしないと、重大なメモリー・リークが発生する場合があり、データベース内のカーソルを使い果たすことがあります。その後、接続をクローズする必要があります。

この章は次の項で構成されています。

8.1 オープンしたすべてのオブジェクトをクローズするメソッドの作成

次の手順では、closeAllメソッドをDataHandlerクラスに追加します。

  1. アプリケーション・ナビゲータでDataHandler.javaをダブルクリックして、Javaソース・エディタで開きます。

  2. DataHandlerクラスの最後で、次のようにcloseAllメソッドを宣言します。

    public void closeAll() {
     
    } 
    
  3. ソッド本体で、次のようにResultSet オブジェクトがオープンしているかどうかを確認します。

    if ( rset != null ) {
    
  4. オープンしている場合は、次のようにクローズして例外を処理します。

      try { rset.close(); } catch ( Exception ex ) {} 
      rset = null;
    } 
    
  5. Statementオブジェクトに同じ操作を繰り返します。

    if ( stmt != null ) {
      try { stmt.close(); } catch ( Exception ex ) {} 
      stmt = null;
    }
    
  6. 最後に、Connectionオブジェクトをクローズします。

    if ( conn != null ) {
      try { conn.close(); } catch ( Exception ex ) {} 
      conn = null;
    }
    

8.2 アプリケーションでのオープンしたオブジェクトのクローズ

ResultSetStatementおよびConnectionオブジェクトは、使い終わった後クローズする必要があります。DataHandlerクラスでは、挿入、更新および削除メソッドでは、戻る前にこれらのオブジェクトをクローズする必要があります。問合せメソッドでは、employees.jspページが問合せによって返された行の処理を終了するまで、これらのオブジェクトをクローズできないことに注意してください。

次の手順では、DataHandler.javaファイルでcloseAllメソッドへの適切なコールを追加します。

  1. Javaソース・エディタでDataHandler.javaを開きます。

  2. addEmployeeメソッドの最後で、catchブロックの閉じカッコの後、finallyブロックでcloseAllメソッドへのコールを追加します。

    finally {
      closeAll();
    }
    
  3. 同じコールをaddEmployeeSPdeleteEmployeeByIdfindEmployeeByIdupdateEmployeeおよびauthenticateUserメソッドに追加します。

  4. ビジュアル・エディタでemployees.jspファイルを開きます。Employees表内のスクリプトレットを検索し、ダブルクリックして「スクリプトレットの挿入」ダイアログ・ボックスを開きます。

  5. 次の文をwhileループの後に追加します。

    empsbean.closeAll();
    
  6. 作業内容を保存し、アプリケーションをコンパイルおよび実行して、すべて正しく動作することを確認します。