Java レコードを検索して都道府県を表示する。

Javaのプログラムから、データベースを操作してレコードを検索します。最初に都道府県を表示するプログラムを作成してみましょう。

まずはデータベースにどんなデータが入っているか中身を確認しておきます。SampleDB030.mdb にはあらかじめデータを入力してあります。


【1】Cドライブ直下の「SampleDB030.mdb」を開きます。

java-338.gif


【2】テーブル「T01Prefecture」を選択し、「開く」をクリックします。

java-339.gif


【3】都道府県が表示されました。

java-340.gif

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 に切り替えます。

java-334.gif


【3】javac PrefSelect.java と入力し、コンパイルします。

java-335.gif


【4】java PrefSelect と入力し、プログラムを実行します。

java-336.gif


【5】プログラムの実行結果が表示されました。

java-337.gif

データベースのテーブル 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();


スポンサードリンク

スポンサードリンク






Java初心者入門講座TOPへ