Java での MySQL 接続
本コンテンツはJava での MySQL 接続へ移動しました。
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 CLASSPATHWindows の場合
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"