データベースへの接続

1.4 データベースへの接続

 本節では実際にJDBCを利用して、JavaプログラムからMySQLデータベースへ接続する方法を学習します。

1.4.1 JDBCを利用したデータベース接続の基本構文

 JavaプログラムからMySQLデータベースへ接続するには、以下の手順を行う必要があります。

 ① JDBC(java.sqlパッケージ)をインポートする。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

 ② JDBCドライバを読み込む。

Class.forName(ドライバ名);

 ③ データベースへ接続する。

Connection con = DriverManager.getConnection(URL,ユーザ名,パスワード);

 データベースへ接続する場合、上記①から③の処理を行います。まずは、import文を利用し、java.sqlパッケージにあるクラスをインポートします。次にClassクラスのforName()メソッドを利用し、1.2節でプロジェクトに追加したJDBCドライバをプログラムとして読み込みます。その後、DriverManagerクラスのgetConnection()メソッドを利用し、データベースに接続する処理を行います。


インポート文の記述

 インポート文は、以降のテキスト内ではアスタリスク「*」を使用していきます。また、プログラムによっては全てのクラスをインポートする必要がないプログラムもあります。必要なクラス名のみを個別にインポートしても問題ありません。

 では実際に、データベースへ接続するプログラムを作成しましょう。


データベースへ接続するプログラム

 このプログラムでは、MySQLデータベースへ接続し、その接続情報を表示するプログラムです。
 なお、プログラムを実行する際に、MySQLが起動していないとエラーになってしまいますので注意して下さい。

① ソース・フォルダー      :myjdbc_kanda/src
② パッケージ          :jp.co.f1.jdbc.ch01
③ 名前             :DBConnectionTester
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる

➢ DBConnectionTester.java
package jp.co.f1.jdbc.ch01;

import java.sql.*;

public class DBConnectionTester {

	//接続用の情報をフィールドに定数として定義
	public static String RDB_DRIVE = "com.mysql.jdbc.Driver";
	public static String URL = "jdbc:mysql://localhost/mybookdb";
 	public static String USER = "bms";
 	public static String PASSWD = "bms123";
 
 	public static void main(String[] args) {
 
 		try{
 			Class.forName(RDB_DRIVE);
 			Connection con = DriverManager.getConnection(URL, USER, PASSWD);
 			
 			//接続成功メッセージとコネクション情報の表示
 			System.out.println("JDBCデータベース接続成功");
 			System.out.println("con = " + con);
 
 			con.close();
 
 		}catch(Exception e){
 			System.out.println("JDBCデータベース接続エラー:" + e);
 		}
 	}
 }

実行結果

解説

 このプログラムでは3行目でjava.sqlパッケージのインポートを行なっています。このインポートによって、データベース接続に必要な各クラスのメソッドを利用することができるようになります。
   3: import java.sql.*;

 8行目から11行目ではデータベースへ接続するために必要は情報を定数として定義しています。
 8行目の情報はJDBCドライバを利用可能にするために指定する文字列です。プロジェクトに追加したJDBCドライバ内にあるDriverクラスの完全限定名となっています。Driverクラスはimportせずに、完全限定名のまま指定します。なお、この文字列がJDBCドライバごとに異なり、MySQLデータベースを利用する場合は、必ず「com.mysql.jdbc.Driver」を指定します。
   8: public static String RDB_DRIVE = "com.mysql.jdbc.Driver";

 9行目から11行目の情報は、接続を行うデータベースのURL、データベースにログインするためのユーザ情報・パスワードを表しています。
 9行目のURLは「jdbc:mysql://ホスト名/データベース名」という構成になっており、使用するデータベースによって変わります。
   9: public static String URL = "jdbc:mysql://localhost/mybookdb";

 10行目のUSERと11行目のPASSWDは、URLに指定したデータベースに接続権限があるユーザー名とパスワードを記載します。そのため、USERとPASSWDについても、使用するデータベースによって変わります。
   10: public static String USER = "bms";
   11: public static String PASSWD = "bms123";

 16行目ではClass.forName()メソッドを利用し、そのクラス内でJDBCドライバを読み込み利用可能な状態にしています。
   16: Class.forName(RDB_DRIVE);

 17行目では9行目から11行目で用意した接続情報を元に、DriverManager.getConnection()メソッドを利用してデータベースに接続する処理を行なっています。
   17: Connection con = DriverManager.getConnection(URL, USER, PASSWD);

 21行目では17行目で生成した接続をSystem.out.println()メソッドで表示しています。
   21: System.out.println("con = " + con);

 23行目ではデータベースとの接続を解除しています。データベースとの接続が不要になった際には、必ず接続を解除しましょう。
   23: con.close();

DriverManager.getConnection()メソッドの引数について

DriverManager.getConnection()メソッドの第一引数であるURLは「jdbc:mysql://ホスト名/データベース名?useUnicode=true&characterEncoding=文字コード」のように指定します。データベース名は、MySQL内の使用するデータベース名、その後の「useUnicode=true&characterEncoding=文字コード」は、使用する文字コードを指定する構文です(省略可能)。また、第二、第三引数のユーザー名とパスワードはURLに指定したデータベースに接続権限があるユーザー名とパスワードを記載します。ユーザ、パスワードはanonymousの場合か、特に設定が無い場合は省略することも可能です。

接続に失敗する場合の注意点

 データベースとの接続に失敗する場合、様々な原因が考えられます。
 以下の点が問題ないか確認してみましょう。
  ① MySQLサービスが起動しているか。
  ② JDBCがJavaプロジェクトのビルドパスに追加されているか。
  ③ ドライバ名が間違っていないか。
  ④ データベースに接続するURLが間違っていないか。
  ⑤ データベースに接続するユーザ名が間違っていないか。
  ⑥ データベースに接続するパスワードが間違っていないか。


NEXT>> 1.5 本章のまとめ