MySQL JDBC を使ってみよう
JDBC を利用した MySQL への接続
MySQL への接続を確立するには、 java.sql.DriverManager の getConnection メソッドを呼びます。
getConnection にはデータベースへの URL (データベース名、ユーザー名、パスワードを含んだ接続文字列) を渡すことによって、 これが MySQL への JDBC 接続であることを認識します。
conn = DriverManager.getConnection( "jdbc:mysql://localhost/db1?user=usr1&password=urpwd");
getConnection メソッドは何らかの理由でデータベースへ接続できない場合等に、 SQLException を投げます。これをキャッチしてしかるべき処置をとる必要があります。(例えば、ユーザーに正常な処理が行えなかったことを表示するなど)
また、接続語は確実に接続を閉じるために try - finally を利用して、close メソッドを呼び出します。
以上を踏まえると、java.sql.Connection を利用するときは以下のようなコードになります。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class MySQLTest1 { public static void main(String[] args) { Connection conn; try { conn = DriverManager.getConnection( "jdbc:mysql://localhost/db1?user=usr1&password=urpwd"); try { // ここでクエリを実行 } finally { // 直前の try ブロックに入ったら、ここは必ず実行される conn.close(); } } catch (SQLException ex) { // 接続できない時 } } }
クエリの実行
データベースに接続したら、好きなクエリを実行できます。
ここでは、次のスクリーンショットのように、rates というテーブルからデータを取得します。
ちなみに、このスクリーンショットは MySQL の管理ツールである MySQL Administrator の画面です。 MySQL を利用するときはこのツールを利用すると、何かと便利です。
さて、JDBC を用いて、上記スクリーンショットと同様に3件のデータが取得できるか試してみましょう。
クエリを実行するときは、Connection の createStatement メソッドを用いてステートメント (Statement) オブジェクトを作成します。 そして、そのステートメントオブジェクトの executeQuery メソッドを用いてクエリを実行します。
結果は ResultSet オブジェクトとして取得できます。
これらをまとめると、以下のコードになります。
Statement stat; ResultSet rs; stat = conn.createStatement(); rs = stat.executeQuery( "SELECT * FROM rates WHERE code='JPY' AND 138 < rate" ); while( rs.next() ) { System.out.format( "%s %.2f\n", rs.getDate(2), // 1 based index rs.getDouble(3) ); }
必要に応じて、次のように import してください。
import java.sql.ResultSet; import java.sql.Statement;
尚、ResultSet の getXXX (XXX は型の名前) メソッドで結果を取得しますが、上記の例のようにカラムのインデックスを用いる場合には、 インデックスは1始まりです。
インデックスではなく、次のようにカラム名を指定することも可能です。
while( rs.next() ) { System.out.format( "%s %.2f\n", rs.getDate( "date" ), rs.getDouble( "rate" ) ); }
実行例
以上をまとめると、簡単なクエリを行うプログラムは次のように書くことができます。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class MySQLTest1 { public static void main(String[] args) { Connection conn; Statement stat; ResultSet rs; try { conn = DriverManager.getConnection( "jdbc:mysql://localhost/db1?user=usr1&password=urpwd"); try { stat = conn.createStatement(); rs = stat.executeQuery( "SELECT * FROM rates WHERE code='JPY' AND 138 < rate" ); while( rs.next() ) { System.out.format( "%s %.2f\n", rs.getDate(2), // 1 based index rs.getDouble(3) ); } } finally { conn.close(); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } } }
実行例は次のとおりです。
> java MySQLTest1 2009-06-10 138.03 2009-08-10 138.01 2009-10-26 138.09
ドライバーが CLASSPATH に正しく設定されていない場合などは、コンパイル時あるいは実行時に失敗しますので、 そのときは MySQL のドライバーの設定 を確認してください。