今回は、Oracleからデータを取得してコンボボックスに設定してみたいと思います。
プロジェクトは前回のものを流用します。
【Swing】eclipse に Swingプラグインをインストールして Hello Wolrd してみる
パッケージ・エクスプローラーから「src」を右クリックし、「新規」>「パッケージ」を選択します。
パッケージ名を入力し、「完了」ボタンをクリックします。
今回は「jp.co.doraxdora.common」としました。
パッケージ・エクスプローラーから作成したパッケージを右クリックし、
「新規」>「クラス」を選択します。
クラス名を入力し、「完了」ボタンをクリックします。
今回は「DBAccess」としました。
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/[email protected]: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();
}
}
Oracle からデータを取得するために、ライブラリを追加します。
パッケージ・エクスプローラーからプロジェクトを右クリックし、「プロパティ」を開きます。
「Javaのビルドパス」メニューを選択し、「ライブラリー」タブを表示、
「外部 JAR の追加」ボタンをクリックします。
ファイル選択ダイアログが表示されるので、
Oracle のインストールディレクトリから対象のファイルが格納されているフォルダを開きます。
デフォルト(Oracle 11g XE)の場合は次の場所に格納されています。
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib
ライブラリフォルダーに格納されている「ojdbc6.jar」を開きます。
WPFの時と同様に、名前ラベル・テキスト、種別ラベル・コンボボックス、ボタンを配置します。
初期表示時に、
Oracle からデータを取得してコンボボックスに設定するように修正します。
MainForm.java
package jp.co.doraxdora.form;
import java.awt.EventQueue;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import jp.co.doraxdora.common.DBAccess;
public class MainForm extends JFrame {
private JPanel contentPane;
private JTextField textField;
private JComboBox<String> comboBox;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainForm frame = new MainForm();
// コンポーネント初期化
frame.initializeComponent();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MainForm() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 462, 304);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel label = new JLabel("名前:");
label.setBounds(12, 10, 46, 13);
contentPane.add(label);
textField = new JTextField();
textField.setBounds(47, 7, 96, 19);
contentPane.add(textField);
textField.setColumns(10);
JLabel label_1 = new JLabel("種別:");
label_1.setBounds(159, 10, 56, 13);
contentPane.add(label_1);
comboBox = new JComboBox();
comboBox.setBounds(195, 7, 119, 19);
contentPane.add(comboBox);
JButton btnNewButton = new JButton("検索");
btnNewButton.setBounds(345, 6, 91, 21);
contentPane.add(btnNewButton);
}
/**
* コンポーネントの初期化処理.
*
*/
private void initializeComponent() throws Exception {
DBAccess dba = new DBAccess();
ResultSet rs = dba.executeQuery("SELECT * FROM MSTKIND ORDER BY KIND_CD");
List<String> list = new ArrayList<String>();
while (rs != null && rs.next()) {
list.add((rs.getString("KIND_NAME")));
}
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>((String[])list.toArray(new String[0]));
comboBox.setModel(model);
}
}
無事にデータを設定することができました。
ひとまずデータの取得まではできたので、
次回はデータテーブルを設置して、検索したデータを表示するところをやろうかと思います。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント