Dúvida sobre conexão com banco de dados

6 respostas Resolvido
java
SoullessBR

Bom dia galera, tudo certo?

Galera tenho uma dúvida sobre conexão com o banco de dados, ela surgiu conversando com um amigo, segundo ele é melhor deixar uma conexão aberta na classe principal e passar ela para os formulários, eu já acho que o mais ideal é cada lugar que for usar abrir uma conexão. Enfim, qual é o mais comum que o pessoal usa para aplicações desktop (não é web!!).

Caso alguém de alguma sugestão seria de muito bom grado algum tutorial.

Obrigado.

6 Respostas

Jonathan_Medeiros

Eu trabalho com uma conexão na classe principal, onde todos os formulários da aplicação resgatam essa conexão, acessam e utilizam, isso evita que a aplicação tenha várias conexões simultaneamente abertas ao mesmo tempo para um único utilizador.

Mas este é um conceito meu, cada um trabalha da maneira em que acha mais apropriado de acordo com cada cenário.

SoullessBR

Obrigado Jonathan, você teria um exemplo de como resgata essa conexão? Obrigado.

Jonathan_Medeiros

Exemplo bem simples que já utilizei bastante!

Faço a instancia da conexão na principal:

ConexaoOracle connection = new ConexaoOracle();

e passo nos construtores dos forms a instância de conexão por parâmetro.

public cadCliente(ConexaoOracle conn){
}

chamando o form cadCliente com parâmetro de conexão com o BD.

new cadCliente(connection);
igorventurelli

Cara, até onde sei, conexões com o banco de dados devem ser stateless.
Abra, faça o que tem que fazer e feche-a.
Não deixe conexões abertas.
É por isso que existem pools de conexões. Você usa e devolve para o pool. Senão não existiria o pool.

Gilian_Marques
Solucao aceita

Olá como igorventurelli disse, abra a conexão faça o que precisa e depois feche, do jeitinho que a sua mãe te ensinou com as coisa na infância. Você pode usar o padrão singleton para resgatar a mesma instância do banco. Abaixo um exemplo mais claro caso tenha fica alguma duvida

private static SuaClasseDeConexaoComDB Instancia = null;


public static SuaClasseDeConexaoComDB getInstancia() {
    if (Instancia == null) {
        Instancia = new SuaClasseDeConexaoComDB ();
    }
    return Instancia;
}
 //construtor privado para que nao possa ser instaciada de fora da classe
 private SuaClasseDeConexaoComDB  () {
 //faça coisas
    }

Espero ter ajudado :slight_smile:

SoullessBR

Entendido galera, muito obrigado, o melhor mesmo então pé abrir a conexão executar a query e fechar.

Dando uma pesquisada vi o tal do connection pool (C3p0 no caso), isso é eficiente para aplicação desktop? Porque testei ele e notei que pra cada pc que abre o programa ele cria 3 conexões com o database.

Obrigado novamente!
Abraço!

Criado 18 de janeiro de 2017
Ultima resposta 18 de jan. de 2017
Respostas 6
Participantes 4