É correto usar sempre a mesma conexão de JDBC em um programa?  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
mateusviccari
JavaGuru

Membro desde: 18/11/2010 18:57:50
Mensagens: 238
Offline

Tenho a seguinte classe:

Aonde eu executo este método criarConexao() apenas uma vez no inicio do programa, e cada vez que eu quero fazer um select eu faço direto chamando o resultSet da classe Conexao. Vocês acham que está certo fazer assim?

Ouvi falar que a conexão pode ser fechada pelo banco depois de um tempo, então pensei em fazer uma thread separada e nessa Thread a cada 20 minutos eu executaria de novo o metodo criarConexao, essa informação procede? e a minha solução é viavel pra evitar esse problema?
oyama
Virtual Machine Man

Membro desde: 19/04/2005 10:11:09
Mensagens: 572
Offline

O melhor é usar um esquema de Connection Pool. Dá uma pesquisada no GUJ sobre isto que vc vai achar bastante referencias.
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

O ideal é você usar um pool de conexões para gerenciar isso pra você. Dê uma olhada no c3p0. Se não quiser usar o pool eu vejo 2 soluções viáveis: ou você abre uma única conexão no início da aplicação e trabalha com ele toda a vida ou cria uma conexão cada vez que você precisar.
O que você pode fazer é criar uma interface ConnectionFactory com o método getConnection(). Faça uma implementação simples que cria uma conexão toda vez que precisar. Caso queira otimizar isso depois, é só mudar a implementação da factory, você pode até mesmo trocar pelo pool depois.

Agora, o que você precisa separar é a classe de conexão da classe que vai manter os ResultSet's e Statement's. Na prática, é até mais importante fechar ResullSet's e Statement's do que conexões, pois eles mantém cursores abertos no banco. No seu caso, eu vejo que você quer buscar informações de cidades. Nesse caso, você precisaria de uma classe para abrir conexões e um DAO para Cidades, com os Statements necessários para buscar as cidades. Você pode ainda, manter a lista das cidades em memória, já que é o tipo de informação que não muda com tanta frequencia.

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
mateusviccari
JavaGuru

Membro desde: 18/11/2010 18:57:50
Mensagens: 238
Offline

Antes eu tava fazendo assim, pra cada select que eu fazia eu criava uma conexão nova e depois de fazer o select eu fechava tudo, connection, statement, e resultset.
Eu resolvi fazer desse método novo pois diziam que ficava mais lento fazer varias conexões do que fazer uma conexão unica no inicio do programa.
rmendes08
GUJ Master
[Avatar]

Membro desde: 29/05/2008 14:09:28
Mensagens: 1617
Online

mateusviccari wrote:Antes eu tava fazendo assim, pra cada select que eu fazia eu criava uma conexão nova e depois de fazer o select eu fechava tudo, connection, statement, e resultset.
Eu resolvi fazer desse método novo pois diziam que ficava mais lento fazer varias conexões do que fazer uma conexão unica no inicio do programa.


Sim, porém você tem que separar a criação da conexão da execução das queries.

"A Técnica é transformada em Arte por quem a emprega"

"O futuro pertence àqueles que acreditam na beleza de seus sonhos"

Computadores Fazem Arte

http://www.uaijug.com.br

"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados."
roger_rf
GUJ Master

Membro desde: 29/04/2009 07:40:19
Mensagens: 1091
Localização: Natal/RN
Offline

O c3p0 oferece um pool de excelente qualidade:

http://www.mchange.com/projects/c3p0/index.html

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Tópico movido para o fórum de persistência.

Outra ótima opção, além do C3P0 é o Jakarta DBCP.

This message was edited 1 time. Last update was at 04/02/2012 16:38:41


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team