Conexão B.D

Amigos, o que voces me dizem em relação ao banco de dados?

é melhor abrir conexao com o BD ficar trabalhando no sistema, e quando fechar o sistema dar um conexao.close ou logo apos fazer a conexao, fazer a pesquisa, insert, etc… ja fechar?

Use um connection pool. Ele pode tomar conta daquele famoso problema “eu deixei a conexão aberta durante a noite, e no dia seguinte o meu sistema parou de funcionar porque a conexão caiu por timeout”.

[quote=entanglement]Use um connection pool. Ele pode tomar conta daquele famoso problema “eu deixei a conexão aberta durante a noite, e no dia seguinte o meu sistema parou de funcionar porque a conexão caiu por timeout”. [/quote]Se não for usar pool, eu abro e fecho.

Sem pool, não rola. [=

Boa pergunta.

Eu, nas minhas aplicações, trabalho da seguinte maneira:

  • abro
  • uso
  • encerro

Nunca tive nenhum problema como esquecer de fechá-la ou coisa parecida.
Sempre segui uma regra qnto a isso. Abre dentro do TRY e fecha no FINALLY, sempre.

Uma coisa que, andei notando essa semana é que tenho muitas instâncias de um mesmo objeto em “n” lugares distintos.
Tem alguma coisa, algum framework ou algo que eu possa fazer para evitar esse monte de instâncias ou não, isso depois de usado vira “lixo” e a máquina virtual Java de encarrega de eliminar. Sei que ela faz essa coleta, de pouco em pouco, mas se houvesse alguma maneira de diminuir esse volume de instâncias, acho que a nível de execução, seria bem interessante.

Marcos cara você pode utilizar uma maneira bem simples para não precisar estar se preocupando declare sua variável como Static daí você só irá ter uma instância como é seu caso que você só quer uma. Daí ficaria assim:

static Connection con = null;
//na meu construtor posso fazer o seguinte
public ClassX{
   con = DriverManager.getConnection(url,login,senha);
//demais implementações
}

Com isso cara você pode ficar tranquilo que caso haja algo de diferente você notará logo e não terá várias instâncias do objeto Connection claro, até porque estamos trabalhando com variáveis de Classe e não de instância.

Com relação à outra questão de deixar a conexão por muito tempo fazendo pesquisa no banco podemos ter um problema de performance. Uma dica muito boa também é fazer o seguinte:

1- Fazer suas consultas no banco de dados;
2- armazená-las em um objeto serializado;
3- fazer as modificações no próprio objeto que contém os dados;
4- fazer novamente a conexão;
5- mandar atualizar;

Uma interface que pode ser usada para fazer isso é a CachedRowSet do pacote javax.sql.rowset;
é só implementar e pronto!!!