Quando eu posso usar um ou outro?
Eu tenho usado sempre o prepareStatement para consulta,inserts, updates no banco, mas vi que também posso usar o prepareCall qual a diferença?
Diferença entre prepareCall e prepareStatement?
5 Respostas
se eu não me engano o prepareCall é para procedure, mas não tenho certeza
Na Interface Connection o método prepareCall(String sql) retorna um CallableStatement para chamar store procedores no banco. Já o método prepareStatement(String sql) retorna um PreparedStatement usado para o envio de comandos SQL parametrizados.
CallableStatement é subinterface de PreparedStatement, e é usada para store procedures porque possui métodos mais apropriados para isso, que permitem até mesmo trabalhar com parâmetros de saída. Sugiro uma lida na API.
Abraço.
Na Interface Connection o método prepareCall(String sql) retorna um CallableStatement para chamar store procedores no banco. Já o método prepareStatement(String sql) retorna um PreparedStatement usado para o envio de comandos SQL parametrizados.
CallableStatement é subinterface de PreparedStatement, e é usada para store procedures porque possui métodos mais apropriados para isso, que permitem até mesmo trabalhar com parâmetros de saída. Sugiro uma lida na API.Abraço.
traduzindo? :roll:
Não entendi sua resposta, a unica vantagem seria para usar store procedures?Que também não sei para o que funciona exatamente, mas obrigado pela resposta 
Desculpe demorar responder, estive meio atarefado, vamos lá:
Stored Procedure como o nome diz é um procedimento armazenado, isto é, uma rotina que você desenvolve que fica no banco de dados. Cada banco tem a sua própria forma/linguagem para desenvolvimento destas rotinas, mas a maioria faz uma mistura de SQL com uma linguagem qualquer. Há diversas razões para utilizar ou não Stored Procedures, mas acho que isso ficaria melhor em outra discussão.
Com relação aos objetos PrepareStatement e CallableStatement minha intenção foi dizer que quando você for trabalhar com Store Procedure você deve “dar preferência” ao CallableStatement porque com ele você consegue trabalhar também com parâmetros de saída. Ficaria mais ou menos assim:
CallableStatement stmt = con.prepareCall("{call ProcTeste[?,?]}");
stmt.setString(1,"Nome");
stmt.registerOutParameter(2,java.sql.Types.INTEGER);
stmt.execute();
int idade = stmt.getInt(2);
Neste exemplo eu estou chamando uma procedure chamada ProcTeste, onde o primeiro parâmetro é somente de entrada, mas o segundo, que é a idade, é de saída.
Se a procedure não tivesse parâmetro de saida eu poderia usar o PrepareStatement. Ficaria assim:
PrepareStatement stmt = con.prepareStatement("call ProcTeste[?]");
stmt.setString(1,"Nome");
stmt.execute();
Ficou mais claro agora? Tem um artigo aqui mesmo no GUJ sobre isso, dá uma lida que é interessante.
ia postar um topic igual
mas aqui ja sano a minha duvida