logo

PreparedStatement インターフェイス

PreparedStatement インターフェイスは Statement のサブインターフェイスです。パラメータ化されたクエリを実行するために使用されます。

パラメータ化されたクエリの例を見てみましょう。

 String sql='insert into emp values(?,?,?)'; 

ご覧のとおり、値のパラメータ (?) を渡しています。その値は、PreparedStatement の setter メソッドを呼び出すことによって設定されます。

PreparedStatement を使用する理由

パフォーマンスの向上 : PreparedStatement インターフェイスを使用すると、クエリが 1 回だけコンパイルされるため、アプリケーションのパフォーマンスが向上します。


PreparedStatement のインスタンスを取得するにはどうすればよいですか?

PreparedStatement のオブジェクトを返すには、Connection インターフェースの prepareStatement() メソッドを使用します。構文:

雪と氷
 public PreparedStatement prepareStatement(String query)throws SQLException{} 

PreparedStatement インターフェースのメソッド

PreparedStatement インターフェイスの重要なメソッドを以下に示します。

方法説明
public void setInt(int paramIndex, int value)整数値を指定されたパラメータのインデックスに設定します。
public void setString(int paramIndex, String value)文字列値を指定されたパラメーターのインデックスに設定します。
public void setFloat(int paramIndex, float value)float 値を指定されたパラメータのインデックスに設定します。
public void setDouble(int paramIndex, double value)double 値を指定されたパラメーターのインデックスに設定します。
public intexecuteUpdate()クエリを実行します。作成、ドロップ、挿入、更新、削除などに使用されます。
パブリックResultSetのexecuteQuery()選択クエリを実行します。 ResultSet のインスタンスを返します。

レコードを挿入する PreparedStatement インターフェイスの例

まずは以下のようなテーブルを作成します。

 create table emp(id number(10),name varchar2(50)); 

次に、以下のコードによってこのテーブルにレコードを挿入します。

 import java.sql.*; class InsertPrepared{ public static void main(String args[]){ try{ Class.forName('oracle.jdbc.driver.OracleDriver'); Connection con=DriverManager.getConnection('jdbc:oracle:thin:@localhost:1521:xe','system','oracle'); PreparedStatement stmt=con.prepareStatement('insert into Emp values(?,?)'); stmt.setInt(1,101);//1 specifies the first parameter in the query stmt.setString(2,'Ratan'); int i=stmt.executeUpdate(); System.out.println(i+' records inserted'); con.close(); }catch(Exception e){ System.out.println(e);} } } 
この例をダウンロードする

レコードを更新する PreparedStatement インターフェイスの例

 PreparedStatement stmt=con.prepareStatement('update emp set name=? where id=?'); stmt.setString(1,'Sonoo');//1 specifies the first parameter in the query i.e. name stmt.setInt(2,101); int i=stmt.executeUpdate(); System.out.println(i+' records updated'); 
この例をダウンロードする

レコードを削除する PreparedStatement インターフェイスの例

 PreparedStatement stmt=con.prepareStatement('delete from emp where id=?'); stmt.setInt(1,101); int i=stmt.executeUpdate(); System.out.println(i+' records deleted'); 
この例をダウンロードする

テーブルのレコードを取得する PreparedStatement インターフェイスの例

 PreparedStatement stmt=con.prepareStatement('select * from emp'); ResultSet rs=stmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+' '+rs.getString(2)); } 
この例をダウンロードする

ユーザーが n を押すまでレコードを挿入する PreparedStatement の例

 import java.sql.*; import java.io.*; class RS{ public static void main(String args[])throws Exception{ Class.forName('oracle.jdbc.driver.OracleDriver'); Connection con=DriverManager.getConnection('jdbc:oracle:thin:@localhost:1521:xe','system','oracle'); PreparedStatement ps=con.prepareStatement('insert into emp130 values(?,?,?)'); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); do{ System.out.println('enter id:'); int id=Integer.parseInt(br.readLine()); System.out.println('enter name:'); String name=br.readLine(); System.out.println('enter salary:'); float salary=Float.parseFloat(br.readLine()); ps.setInt(1,id); ps.setString(2,name); ps.setFloat(3,salary); int i=ps.executeUpdate(); System.out.println(i+' records affected'); System.out.println('Do you want to continue: y/n'); String s=br.readLine(); if(s.startsWith('n')){ break; } }while(true); con.close(); }}