まずはデータベースにどんなデータが入っているか中身を確認しておきます。SampleDB030.mdb にはあらかじめデータを入力してあります。
【1】Cドライブ直下の「SampleDB030.mdb」を開きます。
【2】テーブル「T01Prefecture」を選択し、「開く」をクリックします。
【3】都道府県が表示されました。
T01Prefecture は都道府県マスターです。今回はこのテーブルのデータをコマンドプロンプトに表示するプログラムを作成します。
ここからはプログラムの作成に入ります。
【1】PrefSelect.javaを新たに作成します。
*「\」はWindowsではエンマークのことです。
保存先 C:\java\sample100
ファイル名 PrefSelect.java
import java.sql.*;
class PrefSelect {
public static void main(String args[]) {
try {
//JDBCドライバのロード
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//各設定
String url = "jdbc:odbc:SampleDB030";
String user = "";
String pass = "";
//データベースに接続
Connection con = DriverManager.getConnection(url,user,pass);
//ステートメントオブジェクトを作成
Statement stmt = con.createStatement();
//SQL文作成
String mySql = "select * from T01Prefecture order by PREF_CD";
//検索するSQL実行
ResultSet rs = stmt.executeQuery(mySql);
System.out.println();
System.out.println("PREF_CD PREF_NAME");
System.out.println("--------------------");
//結果セットからデータを取り出す next()で次の行に移動
while(rs.next()) {
int prefCd = rs.getInt("PREF_CD");
String prefName = rs.getString("PREF_NAME");
System.out.print(prefCd + "\t");
System.out.println(prefName + "\t");
}
System.out.println("--------------------");
//オブジェクトを解放
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
System.out.println("例外発生:" + e );
}
}
}
【2】コマンドプロンプトを起動して、カレントディレクトリを sample100 に切り替えます。
【3】javac PrefSelect.java と入力し、コンパイルします。
【4】java PrefSelect と入力し、プログラムを実行します。
【5】プログラムの実行結果が表示されました。
データベースのテーブル T01Prefecture と同じデータが表示されていますね。
【解説】
データベースに接続する部分は、前回説明しましたので省略します。
(1)ステートメントオブジェクトを作成している部分です。
Statement stmt = con.createStatement();
(2)SQL文を作成している部分です。テーブルT01Prefectureからすべてのフィールドを表示し、PREF_CDの昇順で並べ替えています。
String mySql = "select * from T01Prefecture order by PREF_CD";
*SQLについてはAccess SQL初心者入門講座で詳しく解説しています。
(3)検索するSQL文を実行している部分で、結果セットが返ってきます。結果セットは表のようなものだとイメージしてください。
ResultSet rs = stmt.executeQuery(mySql);
(4)結果セットからデータを取り出している部分です。
while(rs.next()) {
int prefCd = rs.getInt("PREF_CD");
String prefName = rs.getString("PREF_NAME");
System.out.print(prefCd + "\t");
System.out.println(prefName + "\t");
}
取り出したばかりの結果セットは「最初の行の前」を指していますので、next()メソッドで次の行に移動してからデータを取り出します。(重要)
next()メソッドは次の行がある間は true を返しますので、while文の条件が満たされるため、レコードの件数分だけ処理が繰り返される仕組みです。
(5)データの取り出し方
int prefCd = rs.getInt("PREF_CD");
String prefName = rs.getString("PREF_NAME");
・rs にはデータ型ごとにメソッドが用意されています。
・メソッドとデータベースのフィールドの型は一致させます。
・メソッドの引数にはフィールド名を書きます。
・戻り値を返しますので、左辺に同じ型の変数を用意します。
(6)コマンドプロンプトの画面に出力している部分です。
System.out.print(prefCd + "\t");
System.out.println(prefName + "\t");
よくみると print() と println() の違いがあります。 print() は改行無し、 println() は改行有りですから、1レコード分出力した後に改行しています。「\t」はタブを意味するので、少し間隔が空きます。
(7)オブジェクトを解放している部分。データベースを切断するには作成した順番と逆にオブジェクトをクローズします。
rs.close();
stmt.close();
con.close();