ヘッダーをスキップ
Oracle® Database Express Edition 2日でJava開発者ガイド
11g リリース2
B66472-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 Oracle Database XEからの切断

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

この章には、次の項が含まれます。

7.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;
    }
    

完成したcloseAllメソッドは、例7-1のようになります。

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

public void closeAll() {
  
  if ( rset != null ) {
    try { rset.close(); 
    } 
    catch ( Exception ex ) {} 
  rset = null;
  }
  
  if ( stmt != null ) {
  try { 
      stmt.close();
  }
  catch ( Exception ex ) {} 
  stmt = null;
  }
  
  if ( conn != null ) {
  try { 
      conn.close(); 
      } 
   catch ( Exception ex ) {} 
conn = null;
  }
 } 

7.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. 作業内容を保存し、アプリケーションをコンパイルおよび実行して、すべて正しく動作することを確認します。