データベースへの接続と切断

広告

JDBCドライバをロードすると、java.sql.DriverManagerクラスに利用可能なドライバとして登録されます。そしてデータベースへ接続するにはDriverManagerに接続しようとするデータベースの情報を指定し接続を行います。

まず下記のクラス図を見てください。

java.lang.Object
  java.sql.DriverManager

public class DriverManager extends Object

データベースへの接続を確立するには「DriverManager」クラスで用意されている"getConnection"メソッドを使います。

public static Connection getConnection(String url, String user, String password) throws SQLException

指定されたデータベースの URL への接続を試みます。DriverManager は、登録
された JDBC ドライバの集合から適切なドライバを選択しようとします。

パラメータ:
  url - jdbc:subprotocol:subname 形式のデータベース URL
  user - その代理として接続が行われるデータベースユーザ
  password - ユーザのパスワード 
戻り値:
  URL への接続 
例外: 
  SQLException - データベースアクセスエラーが発生した場合

引数には接続するデータベースを表すURLと接続用のユーザー名とパスワードを指定します。

MySQLの場合、URLの形式は次のようになります。

jdbc:mysql://(サーバ名)/(データベース名)

例えばローカルホストにある「jdbctestdb」というデータベースに接続する場合は次のようになります。

jdbc:mysql://localhost/jdbctestdb

実際には下記のように利用します。

Connection conn = null;
String url = "jdbc:mysql://localhost/jdbctestdb";
String user = "testuser";
String password = "testpass";

try{
  conn = DriverManager.getConnection(url, user, password);

  // データベースに対する処理

}catch (SQLException e){
}

データベースの切断

実際に接続のテストを行う前にデータベースの切断も見ておきます。"getConnection"メソッドの戻り値として取得できるConnectionインターフェースのオブジェクトは特定のデータベースとの接続 (セッション) を表します。

いったん接続した後に切断する場合には、接続の際に取得したConnectionインターフェースのオブジェクトに対して、"close"メソッドを使います。

void close() throws SQLException

自動的な解除を待たずに、ただちにこの Connection オブジェクトのデータベー
スと JDBC リソースを解除します。

すでにクローズされた Connection オブジェクトで close メソッドを呼び出す
と、操作は行われません。

注: Connection オブジェクトは、ガベージコレクトされるときに自動的にクロー
ズされます。特定の致命的エラーの場合も、Connection オブジェクトはクローズ
されます。

例外:
  SQLException - データベースアクセスエラーが発生した場合

"close"メソッドを呼び出さなくても最終的にはデータベースへの接続はガーベージコレクタによって切断されますが、利用しなくなったデータベースへの接続は速やかに切断するようにします。

"close"メソッドは何か問題が発生した際に忘れずに行うためにも、次のように"finally"節を使って記述します。

Connection conn = null;
String url = "jdbc:mysql://localhost/jdbctestdb";
String user = "testuser";
String password = "testpass";

try{
  conn = DriverManager.getConnection(url, user, password);

  // データベースに対する処理

}catch (SQLException e){
  // 例外処理
}finally{
  try{
    if (conn != null){
      conn.close();
    }
  }catch (SQLException e){
    // 例外処理
  }
}

では次のページでテスト用のデータベースの準備を行います。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。