Uso de Statement e ResultQuery

4 respostas
Rafael_Afonso

Olá:

O que seria mais correto? Fazer assim:

ResultSet rs = null;
try {
 rs = connection..createStatement().executeQuery(query);
 // Uso o ResultSet
} catch (SQLException SQLEx) {
  // Trato a Exceceao		
} finally {
  if (rs != null) {
   try {
    rs.close();
   } catch (SQLException SQLEx) {}
 }
}

Ou:

Statement stmt = null;
ResultSet rs = null;
try {
 stmt = connection.createStatement();
 rs = stmt.executeQuery(query);
 // Uso o ResultSet
 } catch (SQLException SQLEx) {
  // Trato a Excecao		
 } finally {
  if (stmt != null) {
   try {
    stmt.close();
   } catch (SQLException SQLEx) {}
  }
  if (rs != null) {
   try {
    rs.close();
   } catch (SQLException SQLEx) {}
 }
}

Qual seriao motivo para a resposta?

Grato,

4 Respostas

cv1

Feche sempre o resultset, statement e devolva a conexao pro pool :wink:

Ah, e muitissimo cuidado com essa excecao que vc esta ignorando no close()… se por algum motivo a sessao no banco de dados nao fechar, vc nunca vai saber direito o que aconteceu. Logging serve pra isso :smiley:

Rafael_Afonso

Eu sei! Só não coloquei tratamento do catch por preguiça mesmo. Mas No meu trabalho estou o tratando sim.

quanto a sua resposta recebi o seguinte em outro fórum:

Grato,

Daniel_Quirino_Olive

It is generally good practice to release resources as soon as you are finished with them to avoid tying up database resources.
Note: A Statement object is automatically closed when it is garbage collected. When a Statement object is closed, its current ResultSet object, if one exists, is also closed.

O problema é saber quando é que este Statement vai ser removido da memória. Às vezes, dependendo do caso, não é muito seguro ficar esperando por Jesus voltar e o Garbage Collector passar para limpar os objetos não referênciados. Por via das dúvidas, SEMPRE feche os Statements, afinal, não dói nada fazer isso :wink: .

Bani

É, eu já tive problemas gravíssimos por ter esquecido um único ResultSet aberto.
Normalmente os recursos do banco acabam bem antes dos recursos da máquina, então dá pau no banco antes do garbage collector resolver que seria uma boa idéia chamar o finalize.

Criado 6 de outubro de 2003
Ultima resposta 7 de out. de 2003
Respostas 4
Participantes 4