L'interface PreparedStatement est une sous-interface de Statement. Il est utilisé pour exécuter une requête paramétrée.
Voyons l'exemple de requête paramétrée :
String sql='insert into emp values(?,?,?)';
Comme vous pouvez le voir, nous passons le paramètre (?) pour les valeurs. Sa valeur sera définie en appelant les méthodes setter de PreparedStatement.
Pourquoi utiliser PreparedStatement ?
Améliore les performances : Les performances de l'application seront plus rapides si vous utilisez l'interface PreparedStatement car la requête n'est compilée qu'une seule fois.
Comment obtenir l’instance de PreparedStatement ?
La méthode prepareStatement() de l'interface Connection est utilisée pour renvoyer l'objet de PreparedStatement. Syntaxe:
public PreparedStatement prepareStatement(String query)throws SQLException{}
Méthodes de l’interface PreparedStatement
Les méthodes importantes de l'interface PreparedStatement sont indiquées ci-dessous :
Méthode | Description |
---|---|
public void setInt (int paramIndex, valeur int) | définit la valeur entière sur l'index de paramètre donné. |
public void setString (int paramIndex, valeur de chaîne) | définit la valeur de chaîne sur l'index de paramètre donné. |
public void setFloat (int paramIndex, valeur flottante) | définit la valeur flottante sur l'index de paramètre donné. |
public void setDouble (int paramIndex, valeur double) | définit la valeur double sur l'index de paramètre donné. |
public int exécuterUpdate() | exécute la requête. Il est utilisé pour créer, supprimer, insérer, mettre à jour, supprimer, etc. |
public ResultSet exécuterQuery() | exécute la requête de sélection. Il renvoie une instance de ResultSet. |
Exemple d'interface PreparedStatement qui insère l'enregistrement
Tout d’abord, créez le tableau comme indiqué ci-dessous :
create table emp(id number(10),name varchar2(50));
Insérez maintenant les enregistrements dans ce tableau par le code donné ci-dessous :
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);} } }téléchargez cet exemple
Exemple d'interface PreparedStatement qui met à jour l'enregistrement
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');téléchargez cet exemple
Exemple d'interface PreparedStatement qui supprime l'enregistrement
PreparedStatement stmt=con.prepareStatement('delete from emp where id=?'); stmt.setInt(1,101); int i=stmt.executeUpdate(); System.out.println(i+' records deleted');téléchargez cet exemple
Exemple d'interface PreparedStatement qui récupère les enregistrements d'une table
PreparedStatement stmt=con.prepareStatement('select * from emp'); ResultSet rs=stmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+' '+rs.getString(2)); }téléchargez cet exemple
Exemple de PreparedStatement pour insérer des enregistrements jusqu'à ce que l'utilisateur appuie sur n
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(); }}