Dúvida sobre PreparedStatement

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=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.

o site em que eu li:
http://www.theserverside.com/tt/articles/article.tss?l=Prepared-Statments

Ele também impede o ataque por SQL Injection.

No caso de vários SQLs iguais, procure a documentação do método batchUpdate. É a forma de aproveitar 100% do SQL pré-compilado.