WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

JavaでのMySQL接続

      2014/11/22

MySQL 用の JDBCドライバのインストール

JDBCドライバのダウンロード

Java から MySQL へ接続するには、”JDBCドライバ”というものが必要なようです。
JDBCドライバの役割についての解説は以下の通りです。

JDBCドライバとは、異なるデータベースに対するアクセスを行う際に、個々のデータベース毎にプログラムを書き換えなくていいように、データベースと Javaプログラムの間にあってデータベース毎の差を吸収してくれるものです。よってJDBCを使えばデータベースが異なってもJavaプログラムの方は変更を最小限にすることが可能です。逆にJDBCドライバはデータベース毎に用意する必要があります。

MySQL用のJDBCドライバはMySQLから提供されており「MySQL Connector/J」というものになります。
下記URLからダウンロードできます。

http://dev.mysql.com/downloads/

上記URLにアクセスし、画面を下にスクロールしていくと Connector/J というリンクがありますので、それをクリックするとダウンロードページに行けます。
なお、このJDBCドライバは、ドライバとは言ってはいるものの、普通のJavaライブラリのようです。

この記事を書いている2010年5月5日現在でのバージョンは 5.1.12 でした。

クラスパスの設定

ダウンロードしたアーカイブを解凍すると、”mysql-connector-java-5.1.12-bin.jar”というファイルがあります。MySQL接続スクリプト実行時には、このJARファイルにクラスパスを通して置く必要があるので、これを適当なディレクトリに保存し、クラスパスを通します。

クラスパスの通し方は以下の通りです。

Linux の場合
CLASSPATH=.:$JAVA_HOME/lib/mysql-connector-java-5.1.12-bin.jar
export CLASSPATH

Windows の場合
SET CLASSPATH=.;%JAVA_HOME%\lib\mysql-connector-java-5.1.12-bin.jar

複数指定する場合は、LinuxなどのUNIX系OSなら:(コロン)、Windowsの場合は;(セミコロン)で区切ります。
また、環境変数で設定されていない場合は、下記のようにjavaコマンドのオプションで指定することもできます。

# java -classpath './;./lib/mysql-connector-java-5.1.12-bin.jar' con2Mysql

JDBCドライバのロード

以下はJDBCドライバをロードできるか確認するための簡易スクリプトです。
適当なディレクトリに保存し、読み込みが成功した旨のメッセージが表示されたらJDBCドライバのロードは成功です。

public class chkLoadJdbc {
  public static void main(String[] args) {
        String msg = "";
        try {
          Class.forName("com.mysql.jdbc.Driver").newInstance();
          msg = "ドライバのロードに成功しました";
        } catch (ClassNotFoundException e){
          msg = "ドライバのロードに失敗しました";
        }
        System.out.println(msg);
    }
}
# javac chkLoadJdbc.java
# java -classpath './lib/mysql-connector-java-5.1.12-bin.jar:.' chkLoadJdbc
ドライバのロードに成功しました

MySQLへの接続

続いて、MySQLへ接続を行ってみます。
以下はMySQLに接続して任意のデータベースを選択し、テーブルからデータを取り出して出力するという簡単なスクリプトです。

なお、スクリプトで接続するホストはローカルホスト、データベース名はtestdb、テーブル構造は以下の通りとしていますので、適宜必要な値に置き換えてください。

mysql> desc test_table;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| user_id   | int(11)      | YES  |     | NULL    |       |
| user_name | varchar(255) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

以下スクリプトです。

import java.sql.*;

public class con2Mysql {
  public static void main(String[] args) {
        String msg = "";
        try {
            // ドライバロード
            Class.forName("org.gjt.mm.mysql.Driver");

            // MySQLに接続
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost/testdb", "root", "hoge");

            // ステートメント生成
            Statement stmt = con.createStatement();

            // SQLを実行
            String sqlStr = "SELECT * FROM test_table";
            ResultSet rs = stmt.executeQuery(sqlStr);

            // 結果行をループ
            while(rs.next()){
                // レコードの値
                int id = rs.getInt("user_id");
                String name = rs.getString("user_name");

                //表示
                System.out.println(id + ":" + name);
            }

            // 接続を閉じる
            rs.close();
            stmt.close();
            con.close();
        }catch (ClassNotFoundException e){
            msg = "ドライバのロードに失敗しました";
            System.out.println(msg);
        }catch (Exception e){
            msg = "ドライバのロードに失敗しました";
            System.out.println(msg);
        }
    }
}
# javac con2Mysql.java
# java -classpath './lib/mysql-connector-java-5.1.12-bin.jar:.' con2Mysql
1 : hoge
2 : hage

スクリプト中のMySQL接続箇所の接続文字列のフォーマットは下記の通りです。

"jdbc:mysql://HOSTNAME/DBNAME", "ID", "PASS"
例 : "jdbc:mysql://localhost/testdb", "user1", "pass4user1"

 - Java