前回に引き続き、JavaFXです。
今回は Oracle からデータを取得してコンボボックスに設定します。
利用するテーブルや Oracle のインストールなどは次の記事を参照してください。
Oracle Database Express Edition 11g Release 2 のインストールからテーブル作成まで
Swing でやったのとほぼほぼ同じです。
プログラムは前回のものを流用します。
Oracle からデータを取得するために、ライブラリを追加します。
パッケージ・エクスプローラーからプロジェクトを右クリックし、「プロパティ」を開きます。
「Javaのビルドパス」メニューを選択し、「ライブラリー」タブを表示、
「外部 JAR の追加」ボタンをクリックします。
ファイル選択ダイアログが表示されるので、
Oracle のインストールディレクトリから対象のファイルが格納されているフォルダを開きます。
デフォルト(Oracle 11g XE)の場合は次の場所に格納されています。
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
ライブラリフォルダーに格納されている「ojdbc6.jar」を開きます。
次の2つのパッケージを作成します。
jp.co.doraxdora.common
jp.co.doraxdora.dto
パッケージ・エクスプローラーで「src」を右クリック>「新規」>「パッケージ」を選択します。
名前に「jp.co.doraxdora.common」を入力して「完了」ボタンをクリックします。
同様に「jp.co.doraxdora.dto」も作成します。
次の2つのクラスをそれぞれのパッケージに作成します。
jp.co.doraxdora.common.DBAccess.java
jp.co.doraxdora.dto.MstKind.java
パッケージ・エクスプローラーでパッケージを右クリック>「新規」>「クラス」を選択します。
名前に「DBAccess」を入力して「完了」ボタンをクリックします。
同様に「MstKind」も作成します。
DBAccess.java
package jp.co.doraxdora.common;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import oracle.jdbc.pool.OracleDataSource;
/**
* @author doraxdora
*
*/
public class DBAccess {
private static String DB_URL = "jdbc:oracle:thin:USER01/USER01@localhost:1521:XE";
private static Connection con = null;
/**
* コンストラクタ.
*
* @throws Exception
*/
public DBAccess() throws Exception{
super();
// ドライバのロード
OracleDataSource ds = new OracleDataSource();
ds.setURL(DB_URL);
// DB接続
con = ds.getConnection();
}
/**
* SQLを実行して結果を取得します.
* @param sql
* @return
*/
public ResultSet executeQuery(String sql) throws Exception {
PreparedStatement stmt = con.prepareStatement(sql);
return stmt.executeQuery();
}
/**
* パラメータを指定してSQLを実行し、結果を取得します.
*
* @param sql
* @param param
* @return
* @throws Exception
*/
public ResultSet executeQuery(String sql, List<Object> param) throws Exception {
PreparedStatement stmt = con.prepareStatement(sql);
for (int i = 0; i < param.size(); i++) {
if (param.get(i) instanceof String) {
stmt.setString(i, (String) param.get(i));
} else if (param.get(i) instanceof Integer) {
stmt.setInt(i, (int) param.get(i));
}
}
return stmt.executeQuery();
}
}
MstKind.java
/**
*
*/
package jp.co.doraxdora.dto;
import java.io.Serializable;
/**
* MST種別クラス.
*
* @author doraxdora
*
*/
public class MstKind implements Serializable {
/** 種別コード */
private String kindCd;
/** 種別名 */
private String kindName;
/**
* @return kindCd
*/
public String getKindCd() {
return kindCd;
}
/**
* @param kindCd セットする kindCd
*/
public void setKindCd(String kindCd) {
this.kindCd = kindCd;
}
/**
* @return kindName
*/
public String getKindName() {
return kindName;
}
/**
* @param kindName セットする kindName
*/
public void setKindName(String kindName) {
this.kindName = kindName;
}
/* (非 Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return kindName;
}
}
JavaFX の ComboBox の実装が、
toString()メソッドを利用して表示文字列を取得しているため、
toString()メソッドをオーバーライドし、表示するメンバーの値を返すようにする必要があります。
SampleController.java(変更箇所のみ抜粋)
// インポート文追加
import jp.co.doraxdora.common.DBAccess;
import jp.co.doraxdora.dto.MstKind;
public class SampleController implements Initializable{
/** コンボボックス:名前 */
// String から MstKind のリストに変更
// アクセサも修正が必要
@FXML
//private ComboBox<String> cbKind;
private ComboBox<MstKind> cbKind;
/**
* @return cbKind
*/
public ComboBox<MstKind> getCbKind() {
return cbKind;
}
/**
* @param cbKind セットする cbKind
*/
public void setCbKind(ComboBox<MstKind> cbKind) {
this.cbKind = cbKind;
}
)
SampleController.java(メソッドのみ抜粋)
/*
* (非 Javadoc)
* @see javafx.fxml.Initializable#initialize(java.net.URL, java.util.ResourceBundle)
*/
@Override
public void initialize(URL location, ResourceBundle resources) {
try {
DBAccess dba = new DBAccess();
ResultSet rs = dba.executeQuery("SELECT * FROM MSTKIND ORDER BY KIND_CD");
// 指定なしを追加
MstKind empty = new MstKind();
empty.setKindCd("-1");
empty.setKindName("指定なし");
cbKind.getItems().add(empty);
// 取得したデータを追加
while (rs != null && rs.next()) {
MstKind kind = new MstKind();
kind.setKindCd(rs.getString("KIND_CD"));
kind.setKindName(rs.getString("KIND_NAME"));
cbKind.getItems().add(kind);
}
// 初期選択状態を設定
cbKind.getSelectionModel().select(0);
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (Exception e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
内容は前回のものと変わりませんが、
無事に表示することができました。
次回は一覧にデータ表示するところまでやってみたいと思います。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント