今からはじめるプログラミング73(SQLを発行する)

いきなりSQLを発行するといわれても。

というわけで前回の続きでつくったDBに接続してSQLを発行してみます。

SQLというのはDBを操作するプロギュラミンギュ言語です。

プログラムからプログラムを操作するって妙な感じかもしれませんが、

まぁそれで大量データのやり取りがスムーズになれば、いいじゃん、ぐらいで勘弁してください。

環境構築は、やはり以下のサイトのそのままです。

Java SQLiteにJDBC接続してselectするサンプル | ITSakura

若干、前回DB名を変えたり、列名を変えたりしています。

なので、コピペしたいソースも若干修正しました。

というわけでさらに昔の、ログアウトできない画面にメソッドを追加して、ポインタからメソッドを読んでみるようにしてみました。

まったくもってログアウト画面にそんなメソッドを追加する意味はないのですが、追加しました。

Logout.java

--------------------------------------------------------------------------------

package sample38;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Logout extends JFrame implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        // ボタンなどが押された時の処理を描く(イベントドリブンという?)

        String eventName = e.getActionCommand();
        // 確認
        System.out.println(eventName);
        if ("cancel".equals(eventName)) {
            this.setVisible(false);
            // 特に意味はないですが、終了時に数値を通知できます。
            System.exit(99);
        }

    }

    public Logout() {
        init();
    }

    private void init() {
        // コンポーネントの入れ物
        Container container = this.getContentPane();

        JButton btnLogout = new JButton("ログアウト");
        JButton btnCancel = new JButton("キャンセル");
        // コンポーネントのおおきさ
        btnLogout.setSize(100, 30);
        btnCancel.setSize(100, 30);
        // コンポーネントの場所
        btnLogout.setLocation(100, 100);
        btnCancel.setLocation(250, 100);
        // イベント実行時のきりわけに
        btnLogout.setActionCommand("logout");
        btnCancel.setActionCommand("cancel");
        // <b>ログアウトボタンを使用不能に</b>
        btnLogout.setEnabled(false);
        // イベントの登録
        btnLogout.addActionListener(this);
        btnCancel.addActionListener(this);

        JPanel pnl = new JPanel();
        pnl.add(btnLogout);
        pnl.add(btnCancel);

        container.add(pnl);

        this.setTitle("ろぐあうと?");
        this.setSize(600, 400);

        this.setLocation(200, 200);
        this.setVisible(true);

    }
/**
 * SQLを実行するメソッドを追加して、ポインタから実行できるようにした
 * */
    public void execSQL() {

        final String URL = "jdbc:sqlite:E:\\resource\\sqlite_win\\test.db";
        // final String USER = "";
        // final String PASS = "";
        final String SQL = "select * from area where id =? ;";

        try (Connection conn = DriverManager.getConnection(URL);
                PreparedStatement ps = conn.prepareStatement(SQL)) {

            ps.setInt(1, 1);

            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    System.out.println(rs.getInt("id") + " "
                            + rs.getString("name") + " "
                            + rs.getString("comment"));
                }
            }
            ;
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("処理が完了しました");
        }
    }

    public static void main(String args[]) {
        Logout frame = new Logout();
        ////SQLを実行する
        frame.execSQL();

    }

}

--------------------------------------------------------------------------------

実行結果

---------------------------------------------------------------

1 minamino-huchuu test data
処理が完了しました
cancel

---------------------------------------------------------------

 

以下、SQLiteJDBCとテストDBとsrcをまとめてアップしました。

https://aki.teracloud.jp/share/11b1cfdcd5c27f27

 

まぁこれでデータベースは完璧だね、なんてとても言えませんが、

javaDBでDB接続をする手順ですw

 

とはいえ、実際の業務アプリで、JDBC接続なんてするんだろうか。。。

実際は、フレームワークにデータベースとの接続を管理するコネクションプールがあって、そこからコネクションを取得する、、、というような使い方をします。

というのも、コネクションの接続をいちいち切ったりすると、接続に時間がかかったりするので、コネクションを使いまわして、処理速度を稼ぐということをします。

そのコネクションを管理するのをプールと呼んでいますが、いくつかコネクションを保持して、空いているコネクションをプログラムに渡す、みたいなプログラムです。

いちいち同じ記述をプログラムに施す必要もないし、目的のSQLを実行して返すだけでよくなります。

 

アマゾンのタイムセールのリンクを張ろうと思ったのですが、ありきたりでつまらないので、タイムセールの面白ネタを張ろうとしたのであるけれども、画面コピーのしかたを忘れてしまいましてもうした。

特選タイムセール1%オフってwwwwwwwwwwwwwwwwwwwwwwwwwwwwww