2020-01-09に投稿

【Swing】Oracleに接続して取得したデータをコンボボックスに設定する

今回は、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のビルドパス

「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 &amp;&amp; rs.next()) {
                            list.add((rs.getString("KIND_NAME")));
                    }
                    DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>((String[])list.toArray(new String[0]));
                    comboBox.setModel(model);
            }
    }

 

起動してみる

画面

無事にデータを設定することができました。

まとめ

ひとまずデータの取得まではできたので、
次回はデータテーブルを設置して、検索したデータを表示するところをやろうかと思います。

ではでは。

 

Originally published at www.doraxdora.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

doraxdora

IT関係の仕事をしています/1985年生まれの東京在住/便利なサービスやツール漁りや料理などが好き/2017年~ブログやってます/自分でサービスとか作ってリリースしたい/何かありましたらお気軽にDMどうぞ

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント