logo

Rozhraní PreparedStatement

Rozhraní PreparedStatement je podrozhraním příkazu Statement. Slouží k provedení parametrizovaného dotazu.

Podívejme se na příklad parametrizovaného dotazu:

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

Jak vidíte, předáváme parametr (?) pro hodnoty. Jeho hodnota bude nastavena voláním metod setter nástroje PreparedStatement.

Proč používat PreparedStatement?

Zlepšuje výkon : Výkon aplikace bude rychlejší, pokud použijete rozhraní PreparedStatement, protože dotaz je kompilován pouze jednou.


Jak získat instanci PreparedStatement?

Metoda PrepareStatement() rozhraní Connection se používá k vrácení objektu PreparedStatement. Syntax:

 public PreparedStatement prepareStatement(String query)throws SQLException{} 

Metody rozhraní PreparedStatement

Níže jsou uvedeny důležité metody rozhraní PreparedStatement:

MetodaPopis
public void setInt(int paramIndex, int hodnota)nastaví celočíselnou hodnotu na daný index parametru.
public void setString(int paramIndex, hodnota řetězce)nastaví hodnotu String na daný index parametru.
public void setFloat(int paramIndex, plovoucí hodnota)nastaví plovoucí hodnotu na daný index parametru.
public void setDouble(int paramIndex, double value)nastaví hodnotu double na daný index parametru.
public int executeUpdate()provede dotaz. Používá se pro vytváření, pouštění, vkládání, aktualizaci, mazání atd.
public ResultSet executeQuery()provede výběrový dotaz. Vrátí instanci ResultSet.

Příklad rozhraní PreparedStatement, které vkládá záznam

Nejprve vytvořte tabulku, jak je uvedeno níže:

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

Nyní vložte záznamy do této tabulky pomocí kódu uvedeného níže:

 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);} } } 
stáhněte si tento příklad

Příklad rozhraní PreparedStatement, které aktualizuje záznam

 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'); 
stáhněte si tento příklad

Příklad rozhraní PreparedStatement, které odstraní záznam

 PreparedStatement stmt=con.prepareStatement('delete from emp where id=?'); stmt.setInt(1,101); int i=stmt.executeUpdate(); System.out.println(i+' records deleted'); 
stáhněte si tento příklad

Příklad rozhraní PreparedStatement, které načítá záznamy tabulky

 PreparedStatement stmt=con.prepareStatement('select * from emp'); ResultSet rs=stmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+' '+rs.getString(2)); } 
stáhněte si tento příklad

Příklad připraveného výpisu pro vložení záznamů, dokud uživatel nestiskne 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(); }}