目次へ

2.2. java.sql.PreparedStatement

毎回同じようなSQL文、例えば

select p_name from product where p_num='101';

の最後の数字を変えただけのSQL文を何回も実行する場合、毎回SQL文を1から生成しなければならないのは非効率です。「java.sql.PreparedStatement」クラスは、この手間をプログラム的には負荷的にも軽減する目的で作成されたクラスです。

   import java.sql.*;
  
 public class PreparedStatementSample{
   public static void main(String args[]) throws ClassNotFoundException,SQLException{
     Class.forName("org.postgresql.Driver");
     Connection connection=DriverManager.getConnection("jdbc:postgresql:Training","postgres","");
     
     String sql="select p_name from product where p_num=?;";
     PreparedStatement statement=connection.prepareStatement(sql);

    statement.setInt(1,101);
    ResultSet result=statement.executeQuery();
    result.next();
    System.out.println("p_name="+result.getString(1));

    statement.setInt(1,102);
    result=statement.executeQuery();
    result.next();
    System.out.println("p_name="+result.getString(1));
  }
}

9行目で「PreparedStatement」オブジェクトを生成しています。「java.sql.Statement」と異なり、「prepareStatement」メソッドに1つ引数を指定して生成します。引数に指定するのはプリコンパイルするSQL文で、サンプルの場合は以下のようなSQL文が渡されています。

select p_name from customer where p_num=?;

「?」と指定されている部分が可変の部分で、後に「set????」メソッドで値を指定します。サンプルプログラムでは11行目で値を設定しています。設定する値は文字列なので「setString」を使用しています。第一引数は、何番目の「?」に値を設定するか指定するメソッドで、先頭から順に「1」から番号が割り振られています。2番目に設定する値を指定します。SQL文で文字列を指定する場合に必要な「'」はプログラムで自動的に処理されます。

値を設定した後の処理は「Statement」と同じです。「select」文の場合は「executeQuery」、それ以外の場合は「executeUpdate」メソッドを使用します。

(実習課題2)

実習課題1のプログラムを改良しなさい。

  • 「Statement」クラスを使用している部分を「PreparedStatement」に変えること。
  • 行の削除機能も追加する事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp