[quote=entanglement]Nenhum desses objetos (ResultSet, Connection e Statement) é “fechado sozinho” quando a rotina deixa de usá-los.
É melhor sempre fechá-los imediatamente depois do uso (no caso da conexão, talvez você a mantenha aberta o tempo todo, não sei como você estruturou seu programa). Use um “finally” para forçar que os objetos sejam fechados, mesmo que haja alguma exceção no uso que você não conseguiu tratar.
O “garbage collector” até tenta fechar esses objetos, chamando o método “finalize”, mas você não deve confiar nesse comportamento, porque ele é só chamado muito de vez em quando - na verdade, acredito que na segunda passagem do “garbage collection completo” (“full garbage collection”) é que isso ocorre. Ou seja, é uma coisa que pode ficar várias horas com um ResultSet ou Connection ou Statement aberto, se a aplicação não estiver muito sobrecarregada de memória - não é uma boa coisa.
Cuidado com professores que dizem “o garbage collector vai fechar isso para você, não se preocupe”.
Em uma aplicação no mundo real, você não pode depender desse comportamento, que não é documentado e só existe justamente para “quebrar o galho” de programas que tiveram algum problema no tratamento de erros. [/quote]
Grande MESTRE =D
Exatamente o que eu precisava saber. Minha aplicação é a seguinte, tenho X dispositivos que usam para atualizar seus DB locais algumas vezes por dia. Então estou enviando os dados pesquisados no Banco em um XML que o dispositivo (os iPAd) deserializa e grava no DB local.
Mas olha só o que fala na documentação oficial:
[quote]Statement objects will be closed automatically by the Java garbage collector. Nevertheless, it is recommended as good programming practice that they be closed explicitly when they are no longer needed. This frees DBMS resources immediately and helps avoid potential memory problems.
— Traduzindo
Objetos Statement será fechada automaticamente pelo coletor de lixo Java. No entanto, é recomendado como boa prática de programação que ser fechada explicitamente quando eles não são mais necessários. Isso libera os recursos imediatamente DBMS e ajuda a evitar possíveis problemas de memória.[/quote]
Ou seja… o garbage era pra limpar mas não garantimos nada kkk
Em 5.1.5
http://docs.oracle.com/javase/1.4.2/docs/guide/jdbc/getstart/statement.html