Dúvida sobre conexão com banco de dados

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.

1 curtida

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.

1 curtida

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

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);
1 curtida

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.

2 curtidas

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:

2 curtidas

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!