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()
メソッドで対応します。