そこでついでにクラスファイルを使ったコンパイルについても説明することにしました。
【1】sample204 フォルダをフォルダごとコピーして、sample205 フォルダを作ります。

【2】sample101 フォルダから「SampleDb030.class」をコピーして、sample205 フォルダに貼り付けます。

*ソースファイルではなくクラスファイルだということに注意してください。
【3】今回は以下のようなファイル構成になりますので、コピーした余計なものは削除してください。

【4】PrefTest.java を以下のように変更します。
*「\」はWindowsではエンマークのことです。
保存先 C:\java\sample205
ファイル名 PrefTest.java
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
class PrefFrame extends Frame implements ActionListener {
Label lb1;
TextArea txtar1;
Button btn1, btn2, btn3;
public PrefFrame(String title) {
//フレームのタイトル
setTitle(title);
//ウィンドウを閉じる時
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//ラベル
lb1 = new Label("ボタンをクリックしてください。", Label.CENTER);
add(lb1, BorderLayout.NORTH);
//テキストエリア
txtar1 = new TextArea();
add(txtar1, BorderLayout.CENTER);
//パネル
Panel pn1 = new Panel();
pn1.setLayout(new GridLayout(1, 3));
//ボタンの設定とパネルへ追加
btn1 = new Button("表示");
btn1.addActionListener(this);
pn1.add(btn1);
btn2 = new Button("クリア");
btn2.addActionListener(this);
pn1.add(btn2);
btn3 = new Button("終了");
btn3.addActionListener(this);
pn1.add(btn3);
//パネルを追加
add(pn1, BorderLayout.SOUTH);
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() == btn1) {
prefDisplay();
}else if (e.getSource() == btn2) {
txtar1.setText("");
}else {
System.exit(0);
}
}
private void prefDisplay () {
try {
//データベースに接続
Connection con = SampleDb030.getConnection();
//ステートメントオブジェクトを作成
Statement stmt = con.createStatement();
//SQL文作成
String mySql = "select * from T01Prefecture order by PREF_CD";
//検索するSQL実行
ResultSet rs = stmt.executeQuery(mySql);
StringBuffer temp = new StringBuffer();
//結果セットからデータを取り出す next()で次の行に移動
while(rs.next()) {
int prefCd = rs.getInt("PREF_CD");
String prefName = rs.getString("PREF_NAME");
temp.append(prefCd + "\t");
temp.append(prefName + "\n");
}
txtar1.setText(temp.toString());
//オブジェクトを解放
rs.close();
stmt.close();
con.close();
} catch (Exception e) {
System.out.println("例外発生:" + e );
}
}
}
public class PrefTest {
public static void main(String args[]) {
PrefFrame frm = new PrefFrame("都道府県マスター");
//フレームの設定
frm.setLocation(300, 200);
frm.setSize(250, 350);
frm.setBackground(Color.LIGHT_GRAY);
frm.setVisible(true);
}
}
【5】コマンドプロンプトを起動して、カレントディレクトリを sample205 に切り替えます。

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

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

【8】ウィンドウが表示されました。

【9】「表示」ボタンをクリックします。

【10】テキストエリアに都道府県が表示されました。これはデータベースからデータを取得して表示しています。

あとの操作は前回と同じです。「クリア」「終了」ボタンも試してください。
【解説】
(1)SampleDb030.classについて
以前にデータベースに接続するクラスをまとめましたので、sample101 フォルダから「SampleDb030.class」をコピーしました。
今回わざとソースファイルではなくクラスファイルをコピーしたのは、コンパイルする時に必ずしもソースファイルは必要ないことを知ってもらいたいからです。
コンパイラは必要なクラスファイルがあればコンパイルできます。クラスファイルがなければソースコードをコンパイルします。両方ある場合はソースコードの更新日がクラスファイルより新しければコンパイルし直します。
自分で作ったクラスを他の人に利用してもらう時に、クラスファイルだけ渡せば利用できます。プログラムを変更して欲しくないときに便利です。しかしクラスファイルを逆コンパイルしてソースコードにすることはできます。
(2)データベース関係のクラスをインポートしています。
import java.sql.*;
(3)prefDisplay ()メソッドについて
今回はこのメソッドを変更するだけで、データベースからデータを取得して表示できます。データベースに接続する部分はCUIプログラミングの時と同じなので解説は省略します。
ポイントはデータを StringBuffer クラスで結合して、テキストエリアに表示していることです。 StringBuffer クラスの使い方は前回説明しましたので参考にしてください。
StringBuffer temp = new StringBuffer();
while(rs.next()) {
int prefCd = rs.getInt("PREF_CD");
String prefName = rs.getString("PREF_NAME");
temp.append(prefCd + "\t");
temp.append(prefName + "\n");
}
txtar1.setText(temp.toString());
これでやっとシステムっぽくなってきましたね。