こんにちは。「Javaを復習する初心者」です。
今回はPreparedStatementクラスを使い、プレースホルダを含むSQL文に値を設定して発行するということを行いました。
使うデータベースはH2DataBaseです。ブラウザ操作で必要なテーブルとデータの作成を行いました。
データベース側の準備
以下のCREATE文でSAMPLE_USERを作成しました。前回使ったテーブル名なので一度DROP文を使ってテーブルを削除しています。「DROP TABLE IF EXISTS SAMPLE_USER;」でSAMPLE_USERテーブルが存在する場合、削除するということができます。
CREATE文
CREATE TABLE SAMPLE_USER (
ID CHAR(10) not null primary key,
NAME VARCHAR(255) not null,
AGE INT not null,
YEAR INT not null
);
テーブルのカラムは以下の構成です。前回とほとんど同じです。最後にyearカラムを追加しています。
カラム名 | 型 | not null制約 | primary key |
---|---|---|---|
ID | CHAR(10) | あり | ○ |
NAME | VARCHAR(255) | あり | |
AGE | INT | あり |
レコードは社員を表し、最後のカラムに勤務年数を保持しているという想定です。今回はAGEとYEARの条件を指定して検索するということをやっていきます。
テーブルのデータは以下のSQL文で追加しました。
INSERT文
INSERT INTO SAMPLE_USER (ID, NAME, AGE, YEAR) VALUES('A000000001', 'サンプル名前1', 20, 1);
INSERT INTO SAMPLE_USER (ID, NAME, AGE, YEAR) VALUES('A000000002', 'サンプル名前2', 21, 2);
INSERT INTO SAMPLE_USER (ID, NAME, AGE, YEAR) VALUES('A000000003', 'サンプル名前3', 20, 1);
INSERT INTO SAMPLE_USER (ID, NAME, AGE, YEAR) VALUES('A000000004', 'サンプル名前4', 21, 2);
検索処理の実装
以下、作ったプログラムです。
ソース
private static final String sql = "SELECT * FROM SAMPLE_USER WHERE AGE = ? AND YEAR = ?";
public static void main(String[] args) {
try (Connection connection = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
PreparedStatement ps = connection.prepareStatement(sql)) {
ps.setString(1, "20");
ps.setString(2, "1");
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString("id") + ","
+ rs.getString("name") + ","
+ rs.getString("age") + ","
+ rs.getString("year"));
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
staticである変数sqlにSQL文の雛形を定義しました。今回は検索条件を指定するので、WHERE句を使っています。値になる部分にプレースホルダ「?」を記述しています。
mainメソッドの処理の流れは前回とほとんど同じです。プレースホルダに値を設定する箇所以外はほぼ同じです。
PreparedStatement#setStringでSQL文の「?」に文字列を設定することができます。第一引数には「?」の位置を表す自然数を指定します。つまり、最初に現れる「?」を指定する場合、1です。上記プログラムではageが20でyearが1という条件を設定したことになります。
以下が実行結果です。
結果
A000000001,サンプル名前1,20,1
A000000003,サンプル名前3,20,1
検索条件で抽出されていることが確認できます。