もちろん入力支援機能が充実しているので、テキストエディタに比べればキー入力が少なくて済み、文法ミスもすぐに Eclipse が教えてくれます。
今回は共通で使うメソッドを入力しますが、内容はほとんど sample218 のままです。
もし以下の作業中に、ダイアログボックスが勝手に表示された場合は、あわてずに閉じてください。
【1】Eclipse を起動します。
【2】パッケージ・エクスプローラーで PrefFrame.java をダブルクリックして、Javaエディタを表示します。VisualEditor は使わないので小さくしてください。
【3】getJContentPane()メソッドの下(クラスの最後)に以下のコードを入力します。コピーして貼り付けてもかまいません。
ほとんど sample218 のままですが、部品の名前が変わっているので、一部修正しています。
・cp → jContentPane
・lb1 → jLabel
・lt → jList
private void prefDisplay (ResultSet rs) {
tkn = null;
ArrayList<String> listData = new ArrayList<String>();
try {
//結果セットからデータを取り出す next()で次の行に移動
int count = 0;
while(rs.next()) {
int prefCd = rs.getInt("PREF_CD");
String prefName = rs.getString("PREF_NAME");
listData.add(prefCd + "," + prefName);
count++;
}
jList.setListData(listData.toArray());
jLabel.setForeground(Color.BLUE);
if(count == 0) {
jLabel.setText("該当するレコードがありません。");
}else{
jLabel.setText(count + "件表示しました。");
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void showExitDialog () {
//終了ダイアログボックスの表示
int ret = JOptionPane.showConfirmDialog (jContentPane, "プログラムを終了しますか?", "確認", JOptionPane.YES_NO_OPTION);
if(ret == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
private void prefInsert () {
//追加
SampleDb030 db = new SampleDb030();
String message = "PREF_CD を入力してください。";
String title = "追加";
try {
String prefCd = JOptionPane.showInputDialog (jContentPane, message, title,JOptionPane.QUESTION_MESSAGE);
if(prefCd != null && !prefCd.equals("")) {
String message2 = "PREF_NAME を入力してください。";
String prefName = JOptionPane.showInputDialog (jContentPane, message2, title,JOptionPane.QUESTION_MESSAGE);
if(prefName != null && !prefName.equals("")) {
String mySql = "insert into T01Prefecture values(" + prefCd + ", '" + prefName + "')";
System.out.println(mySql);
db.open();
int num = db.executeUpdate(mySql);
prefAll();
jLabel.setText("登録しました。");
}
}
} catch (BadSqlException e) {
jLabel.setText("登録できませんでした。");
jLabel.setForeground(Color.RED);
} catch (Exception e) {
e.printStackTrace();
} finally {
db.close();
}
}
private void prefUpdate () {
//更新
SampleDb030 db = new SampleDb030();
String prefCd = (tkn != null) ? tkn[0] : null;
String prefName = (tkn != null) ? tkn[1] : null;
Object nameObj = null;
try {
if(prefCd != null) {
String message = "「" + prefCd + " " + prefName + "」の\n新しい PREF_NAME を入力してください。";
String title = "更新";
nameObj = JOptionPane.showInputDialog (jContentPane, message, title,JOptionPane.QUESTION_MESSAGE, null, null, prefName);
}else{
JOptionPane.showMessageDialog(jContentPane, "先に都道府県を選択してください。");
}
if(nameObj != null) {
prefName = (String)nameObj;
String mySql = "update T01Prefecture set PREF_NAME = '" + prefName + "' where PREF_CD = " + prefCd;
System.out.println(mySql);
db.open();
int num = db.executeUpdate(mySql);
prefAll();
jLabel.setText(num + "件更新しました。");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
db.close();
}
}
private void prefDelete () {
//削除
SampleDb030 db = new SampleDb030();
String prefCd = (tkn != null) ? tkn[0] : null;
String prefName = (tkn != null) ? tkn[1] : null;
int ret = -9;
try {
if(prefCd != null) {
String message = "「" + prefCd + " " + prefName + "」を削除しますか?";
String title = "削除";
ret = JOptionPane.showConfirmDialog (jContentPane, message, title, JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
}else{
JOptionPane.showMessageDialog(jContentPane, "先に都道府県を選択してください。");
}
if(ret == JOptionPane.OK_OPTION) {
String mySql = "delete from T01Prefecture where PREF_CD = " + prefCd;
System.out.println(mySql);
db.open();
int num = db.executeUpdate(mySql);
prefAll();
jLabel.setText(num + "件削除しました。");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
db.close();
}
}
private void prefSearch () {
//検索
SampleDb030 db = new SampleDb030();
String message = "PREF_NAME の一部を入力してください。";
String title = "検索";
try {
String prefName = JOptionPane.showInputDialog (jContentPane, message, title, JOptionPane.QUESTION_MESSAGE);
if(prefName != null && !prefName.equals("")) {
String mySql = "select * from T01Prefecture where PREF_NAME like '%" + prefName + "%'";
System.out.println(mySql);
db.open();
ResultSet rs = db.executeQuery(mySql);
prefDisplay(rs);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
db.close();
}
}
private void prefAll () {
//全件表示
//SampleDb030をインスタンス化
SampleDb030 db = new SampleDb030();
try {
String mySql = "select * from T01Prefecture order by PREF_CD";
System.out.println(mySql);
//データベースに接続
db.open();
//検索するSQL実行
ResultSet rs = db.executeQuery(mySql);
//データ表示
prefDisplay(rs);
} catch (Exception e) {
e.printStackTrace();
} finally {
//オブジェクトを解放
db.close();
}
}
入力しただけではまだ不十分です。いくつかエラーが表示されるので修正しましょう。
【4】画面左側にはエラーアイコンが表示され、 ResultSet の下に赤い波線が表示されています。これは必要なクラスがインポートされていないことが原因です。
*どのメソッドの ResultSet でもかまいません。インポートを追加するだけなので同じです。
【5】ResultSet をマウスで右クリックし、ソース → インポートの追加 を選択します。
または画面左側に表示されているエラーアイコンをクリックし、「ResultSet をインポートします」をダブルクリックして選択しても同じです。
【6】インポートすると、エラーアイコンと赤い波線が消えました。
【7】jContentPane も同様にエラーアイコンをクリックします。
【8】「jContentPane をインポートします」をダブルクリックして選択します。
【9】ArrayList も同様にエラーアイコンをクリックします。
【10】「ArrayList をインポートします」をダブルクリックして選択します。
【11】変数 thk にも赤い波線が表示されています。これは変数を宣言していないことが原因です。
【12】フィールドの最後に以下の文を加えます。
private String[] tkn;
ここまでの修正でエラーは消えていると思います。警告アイコンは無視してください。あとは都道府県のデータを表示する prefAll()メソッドを呼び出すだけです。
【13】アウトラインビューで initialize()メソッドを選択します。
【14】initialize()メソッドに以下の文を加えます。
// データ表示
prefAll();
【15】保存してアプリケーションを実行してみましょう。都道府県のデータが表示されます。
【16】動作を確認したらアプリケーションを閉じます。
念のためここまでのソースコードをダウンロードできるようにしましたので、どうしても動かない時は利用してください。
pref01.zip