パラメータークエリ
データベースからデータを利用するとき、いつも同じSQL文を使えるわけではありません。状況によってユーザーが検索キーワードを入力し、それをもとにデータを抽出することもあります。その際、抽出するための条件をそのたびに設定しなくてはなりません。今までは次のようにSQL文に直接条件を指定しました。
string sql = “SELECT * FROM Users WHERE Id=” + iddata;
(変数iddataにユーザーが指定したIDが入っているとする)
そのほかにも条件を指定する方法があります。それがパラメータークエリです。パラメータークエリを利用するにはSQL文の条件の部分で、「?」を割り当てておきます。
後で「?」を指定している順番に値を入れることにより、その時に応じたデータを抽出することができます。パラメーターを指定するにはPreparedStatementオブジェクトを使用します。このオブジェクトのメソッドを使ってパラメーターにデータをセットします。このオブジェクトはConnectionオブジェクトのprepareStatementメソッドで取得できます。
■ 主なメソッド
メソッド名
|
概要
|
clearParameters
|
このオブジェクトのパラメーターをクリアする
|
executeQuery
|
SELECT文の実行結果を表すResultSetオブジェクトを返す
|
executeUpdate
|
INSERT、UPDATE、DELETE文を実行する
|
setDouble
|
指定されたパラメーターにdouble値を設定する
|
setInt
|
指定されたパラメーターにint値を設定する
|
setNull
|
指定されたパラメーターにNULL値を設定する
|
setString
|
指定されたパラメーターにString値を設定する
|
PreparedStatementの主なメソッド
○ プロジェクト
プロジェクトを作成して確認してみましょう。先回作成したStatementTestプロジェクトのプログラムをパラメータークエリに変更してみましょう。
サンプルダウンロード
○ 作成の準備
StatementTestプロジェクトをコピーして作成してください。
○ プログラム
mainメソッドを次のように記述してください。
- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- public class ConnectionTest {
- public static void main(String[] args) {
- try{
- //JDBCドライバークラスを指定する
- String drivername = "com.mysql.jdbc.Driver";
- //データベースを指定する
- String url = "jdbc:mysql://localhost:3306/books?characterEncoding=utf8";
- //ユーザー名を指定する
- String username = "root";
- //パスワードを指定する
- String password = "";
- //指定したドライバークラスを読み込む
- Class.forName(drivername);
- //データベースに接続する
- Connection con = DriverManager.getConnection(url, username, password);
- //追加する情報を入力する
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- System.out.println("登録するユーザー情報を入力してください。");
- System.out.print("ID:");
- int id = Integer.parseInt(br.readLine());
- System.out.print("ユーザー名:");
- String uname = br.readLine();
- System.out.print("パスワード:");
- String passwd = br.readLine();
- System.out.print("氏名:");
- String name = br.readLine();
- //入力した情報をもとにSQL文を作成する
- String sql = "INSERT INTO Users VALUES(?, ?, ?, ?)";
- //PreparedStatementオブジェクトを取得する
- PreparedStatement pst = con.prepareStatement(sql);
- //パラメーターを追加する
- pst.setInt(1, id);
- pst.setString(2, uname);
- pst.setString(3, passwd);
- pst.setString(4, name);
- //SQL文を実行する
- int ret = pst.executeUpdate();
- //変更のあった行数を表示する
- System.out.println("変更のあった件数:" + ret);
- //データベースを切断する
- con.close();
- }catch(Exception e){
- //例外の状態を出力する
- e.printStackTrace();
- }
- }
- }
○ 実行結果
登録するユーザー情報を入力してください。
ID:6
ユーザー名:yamamoto
パスワード:ypass
氏名:山本
変更のあった件数:1
Usersテーブルに追加されている
○ 解説
42行目でパラメータークエリを作成しています。ID、ユーザー名、パスワード、氏名用のパラメーターを設定しています。それぞれのパラメーターに対して48~51行目でデータを設定しています。引数に順番、データを渡します。
パラメーターにデータを設定した後、54行目でSQL文を実行しています。
前へ 次へ