2011年10月19日水曜日

[Servlet][JSP][DAO]JDBCについて(可変引数のあるSELECT)

可変要素のあるSELECTを実行するサンプルは、次の通り。

// 可変要素のあるSELECTの実行
public void executePreparedSelect(int searchId) throws ClassNotFoundException,
        SQLException {

    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
        // JDBCドライバをクラス名で探し、初期化を行う
        Class.forName("com.mysql.jdbc.Driver");

        // コネクションを取得する
        conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/SAMPLE", "sampleuser",
                "samplepassword");

        // プリペアドステートメントを作成する
        String sql = "SELECT ID, STR FROM SAMPLE_TABLE WHERE ID = ?";
        ps = conn.prepareStatement(sql);
        ps.setInt(1, searchId);

        // SQLを実行し、リザルトセットを得る
        rs = ps.executeQuery();

        // テーブルにintのID、varcharの文字列がある場合、次のように取得できる
        while (rs.next()) {
            Integer id = rs.getInt(1);
            String str = rs.getString(2);
            System.out.println("ID : " + id);
            System.out.println("STR : " + str);
        }

    } finally {

        // 後始末をする
        if (conn != null) {
            conn.close();
        }
        if (ps != null) {
            ps.close();
        }
        if (rs != null) {
            rs.close();
        }
    }
}

SELECTの可変要素とは、次のSQLの?の部分のことを指す。

"SELECT ID, STR FROM SAMPLE_TABLE WHERE ID = ?"

Javaプログラム(例えば画面入力項目)を?の箇所に当てはめてSQLを実行する場合、本サンプルのようなプログラム記述となる。
1番目の?に引数のsearchIdを設定しているコードは、次の箇所である。

ps.setInt(1, searchId);

文字列を設定する場合はsetStringとなる。
?が2つ以上になる場合は、1、2、3とsetXXXの第1引数を増やしていく。

0 件のコメント:

コメントを投稿