Pessoal,
Estou com a seguinte dúvida,
O que é melhor fazer com o Statement ?
-
Criar um atributo e usar em todos métodos;
-
Criar um Statement para cada método;
-
Receber um Statement com parâmetro do método.
Pessoal,
Estou com a seguinte dúvida,
O que é melhor fazer com o Statement ?
Criar um atributo e usar em todos métodos;
Criar um Statement para cada método;
Receber um Statement com parâmetro do método.
A forma clássica de utilizá-lo é dentro de cada método. Observe:
public void update(final String value) {
Connection con = null;
PreparedStatement stmt = null;
try {
final String sql = "UPDATE users SET NAME = ?";
con = getConnection();
stmt = con.prepareStatement(sql);
stmt.setString(value);
stmt.execute();
} catch (Exception e) { /* //TODO */ } finally {
if (stmt != null) stmt.close();
if (con != null) con.close();
}
}
No caso específico dos Prepared, veja o comentário no java doc da Sun:
Então, se tu tens casos em que dentro de um método tu precisas executar uma instrução mais de uma vez e tens dentro deste mesmo método uma chamada a outro método que compartilha a mesma instância de PreparedStatement, podes ter problemas e criar um estado de inconsistência no objeto (a menos que no retorno da chamada tu refaça novamente o objeto - no fim das contas não compensa criar cada método o seu?!). Caso não haja dependência entre métodos que compartilhem esta mesma instância, a princípio não acho impacto negativo.
Há também as questões relacionadas a transação (commit e rollback). Não posso aviar isto sem testar, mas é algo a se pensar. T+
Opa,
eu vejo como uma melhor solução cada método ter o teu próximo preparedStatement ou Statement, porque é muito interessante que você abra e fecha o ResultSet, Statement, e a Connection ao terminar de comunicar com o banco de dados.
Isto pode evitar que no futuro você não encontre problemas com timout de conexões entre outros problemas.
:okok: