Olá galera estou com uma duvida sobre PreparedStatement, é o seguinte tenho uma método que pecorre um ArrayList de Profissões, dentro desse dele chamo outro método que irá adicionar essas profissões dentro do banco de dados. Agora sim a dúvida, quando o método que irá adicionar no banco terminar e for chamado novamente, o PreparedStatement mandará uma nova consulta SQL ou usará a que ele mandou pela primeira vez que foi chamado. Por que se ele mandar um comando SQL novo a cada chamada de método posso usar um Statement, estou certo?
[quote=lopima]Olá galera estou com uma duvida sobre PreparedStatement, é o seguinte tenho uma método que pecorre um ArrayList de Profissões, dentro desse dele chamo outro método que irá adicionar essas profissões dentro do banco de dados. Agora sim a dúvida, quando o método que irá adicionar no banco terminar e for chamado novamente, o PreparedStatement mandará uma nova consulta SQL ou usará a que ele mandou pela primeira vez que foi chamado. Por que se ele mandar um comando SQL novo a cada chamada de método posso usar um Statement, estou certo?
grato.[/quote]
A questao da consulta a Interface PreparedStatement irá fazer da mesma forma que a inteface Stament faz, ou seja, uma nova consulta(nova requisição no bd), a questao eh qdo usar e qdo nao usar Statement. Eu prefiro sempre usar a interface PreparedStatement, por questoes de legiblidade, ou seja, nao acho viavel sair por ai concatenando sql com variaveis string por exemplo, q eh o caso do Statement, jah no PreparedStatement vc simplesmente seta os parametros ex:
public List<Cidade> getListCidadePorUf(String uf){
Cidade cidade = null;
List<Cidade> list = null;
PreparadStamente pstmt = new Conexao.getConection().prepareStatement("SELECT * FROM Cidade c WHERE c.uf = ?");
pstmt.setString(1,uf);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
list = new ArrayList<Cidade>();
do {
cidade= new Cidade();
cidade.setCodCidade(rs.getInt("CodCidade"));
cidade.setNomeCidade(rs.getString("NomeCidade"));
list.add(cidade);
} while (rs.next());
}
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
Apesar de ah quem prefira usar a classe StringBuffer para concatenar string com sql e mandar um unico parametro com sql jah montadada para o metodo CreateStatement da interface PreparedStatement. Espero ter ajudado. Boa Sorte!
A forma mais eficiente de fazer isso é gerar um SQL, então só adicionar parâmetros através do método addBatch e no final chamar apenas uma vez o método batchUpdate().
cara andei lendo sobre PreparedStatement e descobri que a diferença entre ele e Statement, é que PreparedStatement já deixa o comando pré-compiladoe deixa em cache, enquanto o Statement para cada comando que você manda ele faz uma nova consulta e armazena no cache, em vez de procurar nas pesquisas que já estão armazenadas no cache. Isso torna o PreparedStatement melhor pois vai aumentar a performace na inserção e busca.