SQLの値を書き換える

PreparedStatementインタフェース


はじめに


一つ前の章で( SQLの実行 )で、SQL文を実行するのに、statementインタフェースを使用しました。
PreparedStatementインタフェース は、statementインタフェースと比べて、
JDBC接続の性能向上を図ることをできます。
この章では、 PreparedStatementインタフェース の使い方を学んで行きましょう。

Step1: PreparedStatementとは


例えば会員登録ページをイメージしてみてください。

任意の入力値がDBに送られます。
その入力値によって登録時に使用するSQL文(WHERE句で使用する条件値など)を書き換えたい…
そんな時に便利なのが PreparedStatementインタフェース と呼ばれるものです。
PreparedStatementインタフェース は、何回もSQL文を生成しなくても済むように改良されたクラスです。

例えば、insert文で3レコード挿入する場合は、3回ループしてinsert文を生成し、
executeUpdate()メソッドで実行する方法が考えられます。
PreparedStatementインタフェースでは、そのようなかたちではなくなります。
Step2で具体的に説明してきます。

Step2 : PreparedStatementの使い方


例題

String SQL = "INSERT INTO テーブル名(列名, 列名, …) VALUES( ?, ?, …) ";
PreparedStatement preparedStatement = connection.prepareStatement(SQL);

for (int i = 0; i < 3; i++) {
    preparedStatement.setString(1, 値);
    preparedStatement.setInt(2, 値);
    ・・・
    preparedStatement.executeUpdate();
}

解説
PreparedStatementインタフェースは、 prepareStatement() メソッドにSQL文の引数を指定して生成します。
引数に指定するのはプリコンパイル(実行したいSQL文の値を?に置き換えること)するSQL文で、
上記の例では、 INSERT INTO テーブル名(列名, 列名, …) VALUES( ?, ?, …) のSQL文が渡されています。

ここで ? と指定されている部分が可変の部分で、後に setXXXX() メソッドで値を指定します。
設定する値が、文字列の場合などは、 setString() メソッド、整数の場合は setInt() メソッド、
setLong() メソッド 、日付の場合には setDate() メソッドを使用します。

また、setXXXX()メソッドの 第1引数 は、 何番目の「?」に対応するもの で、
先頭から順に1から番号が割り振られ指定 します。 第2引数 には  を指定します。

最後に、 executeUpdate() メソッドで実行しますが、 引数は要らないので注意してください。
select文の場合には、 executeQuery() メソッドで対応します。

カテゴリー

アーカイブ

Close Bitnami banner
Bitnami