A interface PreparedStatement é uma subinterface de Statement. É usado para executar consultas parametrizadas.
Vejamos o exemplo de consulta parametrizada:
String sql='insert into emp values(?,?,?)';
Como você pode ver, estamos passando o parâmetro (?) para os valores. Seu valor será definido chamando os métodos setter de PreparedStatement.
Por que usar PreparedStatement?
Melhora o desempenho : O desempenho do aplicativo será mais rápido se você usar a interface PreparedStatement porque a consulta é compilada apenas uma vez.
Como obter a instância do PreparedStatement?
O método prepareStatement() da interface Connection é usado para retornar o objeto de PreparedStatement. Sintaxe:
public PreparedStatement prepareStatement(String query)throws SQLException{}
Métodos da interface PreparedStatement
Os métodos importantes da interface PreparedStatement são fornecidos abaixo:
Método | Descrição |
---|---|
public void setInt(int paramIndex, int valor) | define o valor inteiro para o índice do parâmetro fornecido. |
public void setString(int paramIndex, valor String) | define o valor String para o índice do parâmetro fornecido. |
public void setFloat(int paramIndex, valor flutuante) | define o valor flutuante para o índice do parâmetro fornecido. |
public void setDouble(int paramIndex, valor duplo) | define o valor duplo para o índice de parâmetro fornecido. |
public int executeUpdate() | executa a consulta. É usado para criar, descartar, inserir, atualizar, excluir etc. |
conjunto de resultados público executeQuery() | executa a consulta selecionada. Ele retorna uma instância de ResultSet. |
Exemplo de interface PreparedStatement que insere o registro
Primeiro de tudo, crie a tabela conforme abaixo:
create table emp(id number(10),name varchar2(50));
Agora insira os registros nesta tabela pelo código abaixo:
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);} } }baixe este exemplo
Exemplo de interface PreparedStatement que atualiza o registro
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');baixe este exemplo
Exemplo de interface PreparedStatement que exclui o registro
PreparedStatement stmt=con.prepareStatement('delete from emp where id=?'); stmt.setInt(1,101); int i=stmt.executeUpdate(); System.out.println(i+' records deleted');baixe este exemplo
Exemplo de interface PreparedStatement que recupera os registros de uma tabela
PreparedStatement stmt=con.prepareStatement('select * from emp'); ResultSet rs=stmt.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+' '+rs.getString(2)); }baixe este exemplo
Exemplo de PreparedStatement para inserir registros até que o usuário pressione 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(); }}