logo

Interfície PreparedStatement

La interfície PreparedStatement és una subinterfície de Statement. S'utilitza per executar consultes parametritzades.

Vegem l'exemple de consulta parametritzada:

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

Com podeu veure, estem passant el paràmetre (?) per als valors. El seu valor s'establirà cridant als mètodes setter de PreparedStatement.

Per què utilitzar PreparedStatement?

Millora el rendiment : El rendiment de l'aplicació serà més ràpid si utilitzeu la interfície PreparedStatement perquè la consulta només es compila una vegada.


Com obtenir la instància de PreparedStatement?

El mètode prepareStatement() de la interfície Connection s'utilitza per retornar l'objecte de PreparedStatement. Sintaxi:

 public PreparedStatement prepareStatement(String query)throws SQLException{} 

Mètodes de la interfície PreparedStatement

Els mètodes importants de la interfície PreparedStatement es mostren a continuació:

MètodeDescripció
public void setInt(int paramIndex, int valor)estableix el valor enter a l'índex del paràmetre donat.
public void setString(int paramIndex, valor de cadena)estableix el valor String a l'índex del paràmetre donat.
public void setFloat(int paramIndex, valor flotant)estableix el valor flotant a l'índex del paràmetre donat.
public void setDouble(int paramIndex, valor doble)estableix el valor doble a l'índex del paràmetre donat.
public int executeUpdate()executa la consulta. S'utilitza per crear, deixar anar, inserir, actualitzar, suprimir, etc.
Public ResultSet executeQuery()executa la consulta de selecció. Retorna una instància de ResultSet.

Exemple de la interfície PreparedStatement que insereix el registre

Primer de tot, creeu la taula tal com es mostra a continuació:

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

Ara inseriu registres en aquesta taula amb el codi que es mostra a continuació:

 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);} } } 
descarregueu aquest exemple

Exemple d'interfície PreparedStatement que actualitza el registre

 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'); 
descarregueu aquest exemple

Exemple d'interfície PreparedStatement que elimina el registre

 PreparedStatement stmt=con.prepareStatement('delete from emp where id=?'); stmt.setInt(1,101); int i=stmt.executeUpdate(); System.out.println(i+' records deleted'); 
descarregueu aquest exemple

Exemple d'interfície PreparedStatement que recupera els registres d'una taula

 PreparedStatement stmt=con.prepareStatement('select * from emp'); ResultSet rs=stmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+' '+rs.getString(2)); } 
descarregueu aquest exemple

Exemple de PreparedStatement per inserir registres fins que l'usuari preme 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(); }}