Olá a todos, recentemente eu li algumas coisas sobre a classe Statement e PreparedStatement e me surgiram algumas duvidas:
-
Quando eu devo usar Statement e quando eu devo usar PreparedStatement?
-
Notei que ambas as classes possuem os metodos executeUpdate, executeQuery e execute. Quando eu devo usar executeQuery e quando devo usar execute? (Eu sei que executeQuery é para select e executeUpdate é para update, insert e delete).
-
O PreparedStatement me deixa 100% imune ao SQL Injection ou eu ainda preciso tomar cuidado com outras coisas?
Eu tenho certeza que eu tinha outra pergunta mas não me lembro agora hehe. Bom pessoal, essas são as minhas dúvidas.
Statement: Quando você for rodar uma única query, uma única vez, sem nenhum parâmetros vindo do seu usuário (em resumo, praticamente nunca);
PreparedStatement: Demais casos.
[quote=Sem_Nome]2) Notei que ambas as classes possuem os metodos executeUpdate, executeQuery e execute. Quando eu devo usar executeQuery e quando devo usar execute? (Eu sei que executeQuery é para select e executeUpdate é para update, insert e delete).
[/quote]
PreparedStatement é filho de Statement. O execute() geralmente é usado quando vc quer fazer polimorfismo, ou seja, praticamente nunca. Outra situação é quando você permite ao usuário que escreva a query, sem ter idéia do que ele colocou lá dentro o que - a menos que vc esteja programando um Database Manager - você nunca vai fazer.
O mais comum é ficar no executeQuery() e no executeUpdate() mesmo.
Deixa sim. Ele sabe exatamente o que é query e o que é dado, por isso, ele jamais vai interpretar a String ’ como fechamento da sua query.
Existem outros motivos para usar o PreparedStatement:
- Ele lida sozinho com formatos, como os de data, números decimais e Strings;
- Ele torna consultas idênticas seguidas mais eficientes;
- A comunicação com o banco de dados com ele é mais eficiente (os dados podem ser transmitidos de maneira binária, e não na forma de texto formatado);
Statement: Quando você for rodar uma única query, uma única vez, sem nenhum parâmetros vindo do seu usuário (em resumo, praticamente nunca);
PreparedStatement: Demais casos.
[quote=Sem_Nome]2) Notei que ambas as classes possuem os metodos executeUpdate, executeQuery e execute. Quando eu devo usar executeQuery e quando devo usar execute? (Eu sei que executeQuery é para select e executeUpdate é para update, insert e delete).
[/quote]
PreparedStatement é filho de Statement. O execute() geralmente é usado quando vc quer fazer polimorfismo, ou seja, praticamente nunca. Outra situação é quando você permite ao usuário que escreva a query, sem ter idéia do que ele colocou lá dentro o que - a menos que vc esteja programando um Database Manager - você nunca vai fazer.
O mais comum é ficar no executeQuery() e no executeUpdate() mesmo.
Deixa sim. Ele sabe exatamente o que é query e o que é dado, por isso, ele jamais vai interpretar a String ’ como fechamento da sua query.
Existem outros motivos para usar o PreparedStatement:
- Ele lida sozinho com formatos, como os de data, números decimais e Strings;
- Ele torna consultas idênticas seguidas mais eficientes;
- A comunicação com o banco de dados com ele é mais eficiente (os dados podem ser transmitidos de maneira binária, e não na forma de texto formatado);
[/quote]
Perfeito. Obrigado por tirar essas duvidas e a resposta extra na 3).
Tópico resolvido.