パラメータークエリ

 データベースからデータを利用するとき、いつも同じ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プロジェクトのプログラムをパラメータークエリに変更してみましょう。

プロジェクト名 ParameterTest

サンプルダウンロード

○ 作成の準備

 StatementTestプロジェクトをコピーして作成してください。

○ プログラム

 mainメソッドを次のように記述してください。

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.PreparedStatement;
  6. public class ConnectionTest {
  7.  public static void main(String[] args) {
  8.   try{
  9.    //JDBCドライバークラスを指定する
  10.    String drivername = "com.mysql.jdbc.Driver";
  11.    //データベースを指定する
  12.    String url = "jdbc:mysql://localhost:3306/books?characterEncoding=utf8";
  13.    //ユーザー名を指定する
  14.    String username = "root";
  15.    //パスワードを指定する
  16.    String password = "";
  17.    //指定したドライバークラスを読み込む
  18.    Class.forName(drivername);
  19.    //データベースに接続する
  20.    Connection con = DriverManager.getConnection(url, username, password);
  21.    //追加する情報を入力する
  22.    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  23.    System.out.println("登録するユーザー情報を入力してください。");
  24.    System.out.print("ID:");
  25.    int id = Integer.parseInt(br.readLine());
  26.    System.out.print("ユーザー名:");
  27.    String uname = br.readLine();
  28.    System.out.print("パスワード:");
  29.    String passwd = br.readLine();
  30.    System.out.print("氏名:");
  31.    String name = br.readLine();
  32.   //入力した情報をもとにSQL文を作成する
  33.    String sql = "INSERT INTO Users VALUES(?, ?, ?, ?)";
  34.    //PreparedStatementオブジェクトを取得する
  35.    PreparedStatement pst = con.prepareStatement(sql);
  36.    //パラメーターを追加する
  37.    pst.setInt(1, id);
  38.    pst.setString(2, uname);
  39.    pst.setString(3, passwd);
  40.    pst.setString(4, name);
  41.    //SQL文を実行する
  42.    int ret = pst.executeUpdate();
  43.    //変更のあった行数を表示する
  44.    System.out.println("変更のあった件数:" + ret);
  45.    //データベースを切断する
  46.    con.close();
  47.   }catch(Exception e){
  48.    //例外の状態を出力する
  49.    e.printStackTrace();
  50.   }
  51.  }
  52. }

○ 実行結果

登録するユーザー情報を入力してください。 ID:6
ユーザー名:yamamoto
パスワード:ypass
氏名:山本
変更のあった件数:1

Usersテーブルに追加されている
Usersテーブルに追加されている

○ 解説

 42行目でパラメータークエリを作成しています。ID、ユーザー名、パスワード、氏名用のパラメーターを設定しています。それぞれのパラメーターに対して48~51行目でデータを設定しています。引数に順番、データを渡します。

 パラメーターにデータを設定した後、54行目でSQL文を実行しています。

前へ   次へ