広告 |
---|
■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ 2011年01月25日 Java総合講座 - 初心者から達人へのパスポート 2009年11月開講コース 037号 セルゲイ・ランダウ バックナンバー: http://www.flsi.co.jp/Java_text/ ■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ ------------------------------------------------------- ・現在、このメールマガジンは以下の2部構成になっています。 [1] 当初からのコース:vol.xxx(xxxは番号)が振られています。 これは現在、中級レベルになっています。 [2] 2009年11月開講コース:xxx号(xxxは番号)が振られています。 これは現在、初心者向けのレベルになっています。 ・このメールマガジンは、画面を最大化して見てください。 小さな画面で見ていると、不適切な位置で行が切れてしまう など、問題を起すことがあります。 ・このメールマガジンに掲載されているソース・コード及び 文章は特に断らない限り、すべて筆者が著作権を所有してい ます。また、これらのソース・コードは学習用のためだけに 提供しているものです。 ------------------------------------------------------- ======================================================== ◆ 01.データベースを使用するアプリケーションの開発(続き) ======================================================== 今回は、先週の続きとして、まずコーディングの例を提示して いくことにします。 なお、ソース・コードの解説は次回にまわします。 余力のある人は、下記のコーディングの例をすべてEclipseに 入力して、動作を確認してみてください。 Eclipseへの具体的な入力方法についても次回説明いたします。 では、まずComboBoxModelOfDepartmentのコーディング例を提示 します。 -------------------------------------------------------- package jp.co.flsi.lecture.ui.model; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; import java.util.Vector; import jp.co.flsi.lecture.entity.Department; public class ComboBoxModelOfDepartment extends AbstractListModel implements ComboBoxModel { private Vector departmentList; private String selection; public void setDepartmentList(Vector aDepartmentList) { departmentList = aDepartmentList; } public Vector getDepartmentList() { return departmentList; } public Object getSelectedItem() { return selection; } public void setSelectedItem(Object anItem) { selection = (String)anItem; } public Object getElementAt(int index) { return ((Department) getDepartmentList().elementAt(index)).getDepartmentName(); } public int getSize() { return getDepartmentList().size(); } } -------------------------------------------------------- このソース・コードの中に出てくるDepartmentというのは、部門 を表現するクラス(現実世界のオブジェクトをモデル化したもの) です。 そのDepartmentクラスのソース・コードの例は以下の通りです。 -------------------------------------------------------- package jp.co.flsi.lecture.entity; public class Department { private int departmentNumber; private String departmentName; private String location; public void setDepartmentNumber(int departmentNumber) { this.departmentNumber = departmentNumber; } public int getDepartmentNumber() { return departmentNumber; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } public String getDepartmentName() { return departmentName; } public void setLocation(String location) { this.location = location; } public String getLocation() { return location; } } -------------------------------------------------------- それから、データベース処理専用のオブジェクトのクラスを以下 のようにコーディングしてみます。 まず、個々のテーブルに依存しない基本的な処理だけを行うクラス をDbManagerというクラス名で作成することにします。 下記がそのコーディング例です。 -------------------------------------------------------- package jp.co.flsi.lecture.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DbManager { protected static Connection conn = null; protected String driver = "org.h2.Driver"; protected String url = "jdbc:h2:tcp://localhost/~/test"; protected String dbUser = "sa"; protected String dbPassword = ""; protected void connect() throws java.sql.SQLException { try { if(conn == null || conn.isClosed()) { Class.forName(driver); conn = DriverManager.getConnection (url, dbUser, dbPassword); conn.setAutoCommit(false); } } catch(ClassNotFoundException ex) { ex.printStackTrace(); } } protected void disconnect() { try { conn.close(); } catch(SQLException ex) { ex.printStackTrace(); } } } -------------------------------------------------------- 次にDbManagerのサブクラスとして、個々のテーブルを処理する クラスを用意することにしますが、今回はDEPARTMENTテーブルを 処理するためのクラスとしてDepartmentDbManagerというクラスを 作成することにします。 下記がそのコーディング例です。 -------------------------------------------------------- package jp.co.flsi.lecture.db; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Vector; import jp.co.flsi.lecture.entity.Department; public class DepartmentDbManager extends DbManager { private Vector departmentList = new Vector(); public Vector getDepartmentList() { return departmentList; } public void getAllData() { try { connect(); Statement selectSql = conn.createStatement(); ResultSet rs = selectSql.executeQuery("SELECT * FROM DEPARTMENT"); while (rs.next()) { Department aDepartment = new Department(); aDepartment.setDepartmentNumber(rs.getInt("DEPART_NUM")); aDepartment.setDepartmentName(rs.getString("DEPART_NAME")); aDepartment.setLocation(rs.getString("LOCATION")); getDepartmentList().addElement(aDepartment); } selectSql.close(); disconnect(); } catch (SQLException exception) { exception.printStackTrace(); } } } -------------------------------------------------------- なお、Javaのプログラムでデータベース処理を行う(RDBMSを呼び出す) ためには、JDBCドライバーをJavaのクラスパス(CLASSPATH)に登録して おく必要がありますが、Eclipseの場合は下記(補足)のような作業を行っ ておきます。(022号で実施済みの人は読むだけにして下さい。) ┌補足─────────────────────────┐ EclipseでH2 Database EngineのJDBCドライバーをクラスパスに追加す るには下記の[方法1]または[方法2]のいずれかを行います。 [方法1] (1) 「パッケージ・エクスプローラー」の中のJStudy1(プロジェクト名) を右クリックし 「プロパティー」を選択する。 (2) 「プロパティー」ウインドウの左側で「Javaのビルド・パス」を クリックし、右側の「ライブラリー」タブをクリックする。 (3) 右側の「外部JARの追加」ボタンをクリックする。 (4) 「JARの選択」ウインドウで適切なJARファイルを選択する。 H2 Database EngineのJDBCドライバーの場合は標準のインストールでは、 C:のProgram Filesフォルダーの中のH2フォルダーの中のbinフォルダー の中にh2-1.2.132.jarというファイル名で入っているので、これを選択し、 「開く」ボタンをクリックする。 (JARファイルとは何か、という話については後述) (5) 「プロパティー」ウインドウの「OK」ボタンをクリックする。 [方法2] (1) 「ウィンドウ」メニュー → 「設定」を選択する。 (2) 「設定」ウインドウの左側で「Java」の中の「ビルド・パス」の中の 「ユーザー・ライブラリー」をクリックする。 (3) 右側の「新規」ボタンをクリックする。 (4) ライブラリー名を例えば「h2database」と入力して「OK」ボタンを クリックする。 (5) 「h2database」を選択し、「JARの追加」ボタンをクリックする。 (6) 「JARの選択」ウインドウで適切なJARファイルを選択する。 H2 Database EngineのJDBCドライバーの場合は標準のインストールでは、 C:のProgram Filesフォルダーの中のH2フォルダーの中のbinフォルダー の中にh2-1.2.132.jarというファイル名で入っているので、これを選択し、 「開く」ボタンをクリックする。 (JARファイルとは何か、という話については後述) (7) 「設定」ウインドウの「OK」ボタンをクリックする。 (8) 「パッケージ・エクスプローラー」の中のJStudy1(プロジェクト名) を右クリックし「プロパティー」を選択する。 (9) 「プロパティー」ウインドウの左側で「Javaのビルド・パス」を クリックし、右側の「ライブラリー」タブをクリックする。 (10) 右側の「ライブラリーの追加」ボタンをクリックする。 (11) 「ライブラリーの追加」ウインドウの中の「ユーザー・ライブラリー」 を選択し、「次へ」ボタンをクリックする。 (12) 「h2database」(これは先ほど作成したライブラリー名)の左側に チェック・マークを入れ(クリックすればチェック・マークが入る)、 「完了」ボタンをクリックする。 (13) 「プロパティー」ウインドウの「OK」ボタンをクリックする。 上記の[方法1]と[方法2]を比較すると[方法1]のほうが簡単に見えますが、 のちにさまざまなプロジェクトで同じJDBCドライバーを使用することま で考えると、[方法2]を使ったほうが後々の作業が楽になります。 └───────────────────────────┘ なお、これらのクラスを作っただけでは、JComboBoxには何も表示され ませんね。 まだJComboBoxとの関連付けがされていないのですから、あたりまえです。 そこで、HumanResourceEntryPaneのソース・コードの中の以下の部分 -------------------------------------------------------- private JComboBox getComboBox_1() { if (comboBox_1 == null) { comboBox_1 = new JComboBox(); } return comboBox_1; } -------------------------------------------------------- を次のように編集しておくことにします。 -------------------------------------------------------- private JComboBox getComboBox_1() { if (comboBox_1 == null) { DepartmentDbManager aDbm = new DepartmentDbManager(); aDbm.getAllData(); ComboBoxModelOfDepartment model = new ComboBoxModelOfDepartment(); model.setDepartmentList(aDbm.getDepartmentList()); comboBox_1 = new JComboBox(model); comboBox_1.setSelectedIndex(0); } return comboBox_1; } -------------------------------------------------------- これでデータベースのDEPARTMENTテーブルから取り出した部門名のリスト をJComboBoxに表示するための仕組みが一通りできたはずです。 (これらのソース・コードの入力は後の記事で行います。) (続く・・・) ================================================ ◆ 02.演習問題 ================================================ ここまでのところをEclipseに自力で入力できる人は、独力で入力して HumanResourceJFrameを実行し、動作を確認してみてください。 なお、プログラムの実行前にRDBMSを起動しておかなければデータ ベースが使用できませんから、あらかじめH2 Consoleを立ち上げる などしてH2 Database EngineのRDBMSを起動しておいてください。 では、また来週。 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ★ホームページ: http://www.flsi.co.jp/Java_text/ ★このメールマガジンは 「まぐまぐ(http://www.mag2.com)」 を利用して発行しています。 ★バックナンバーは http://www.flsi.co.jp/Java_text/ にあります。 ★このメールマガジンの登録/解除は下記Webページでできます。 http://www.mag2.com/m/0000193915.html ★このメールマガジンへの質問は下記Webページにて受け付けて います。わからない所がありましたら、どしどしと質問をお寄 せください。 http://www.flsi.co.jp/Java_text/ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ Copyright (C) 2011 Future Lifestyle Inc. 不許無断複製 |