Conexão a banco de dados

6 respostas
Elizeu_Santos

ola amigos. estava lendo a apostila FJ21, putz. Dificil entender a intenção do autor ao criar as conexões. gostaria de saber se existe forma mais pratica que esteja dentro dos Design patterns. segue a parte do código que eu não entendi bolufas.

public Connection getConnection() { } System.out.println("Conectando ao banco"); try { return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", ""); } catch(SQLException e) { throw new RuntimeException(e);

ele esta reescrevendo o getConnection?
por que ele retorna uma conexão? ele não vai acessar apenas uma base de dados? apenas um banco?
isso fica girando na cabeça do aluno (ao menos na minha).
gostaria de auxilio.
se alguém tiver algum material ou tutorial serei grato, procurei na net mais a maioria é bem antigo… inclusive aqui no guj. ainda usam class.forname.

obrigado

6 Respostas

rfa1989

O que ele quer fazer ali eh encapsular a complexidade do código de se criar uma conexão em uma fabrica de conexões.
Fazemos isso normalmente quando a construcao de certo objeto é complexa demais.

A partir de agora, basta chamar o getConnection() desta factory, sem se preocupar com os detalhes de implementação.
E mais que isso, se algum dia, voce pensar em mudar o banco para, digamos , postgresql, soh vai precisar mudar esse tipo de coisa em um só lugar.

Além disso, ele faz um wrap da excecao SQLException para uma RuntimeException. Isso levanta dois pontos:

  1. O codigo que for usar essa getConnection() não vai ficar sabendo de muitos detalhes de implementação, como SQLException poderia revelar.
  2. A excecao SQLException, na minha opniao, deveria ter sido construida como filha de Runtime desde o começo, pois normalmente trata-se de codigo irrecuperavel a nivel de desenvolvimento (acho q li algo sobre isso no blog da caelum uma vez, num post do Fabio Kung)
Elizeu_Santos

acho que começo a entender…
então o método não foi reescrito?

para reescrever eu teria de herdar o DriverManagment para ai sim reescrever o metodo certo??
ja agradeço =).

mais eu fiquei sem entender a lógica do negócio

Connection connection = new ConnectionFactory().getConnection(); System.out.println("Conexão aberta!"); connection.close();

eu crio uma fabrica de conexões, e quem recebe essas conexões?
eu não deveria apenas “abrir”?

alguém pode explicar como funciona a regra do negócio??

rfa1989

acho que começo a entender…
então o método não foi reescrito?

para reescrever eu teria de herdar o DriverManagment para ai sim reescrever o metodo certo??
ja agradeço =).


Sim, apesar de eu nunca ter visto uma classe herdando DriverManagement

mais eu fiquei sem entender a lógica do negócio

Connection connection = new ConnectionFactory().getConnection(); System.out.println("Conexão aberta!"); connection.close();

eu crio uma fabrica de conexões, e quem recebe essas conexões?
eu não deveria apenas “abrir”?

alguém pode explicar como funciona a regra do negócio??

Bom, tu tem que lembrar q isso é apenas um exemplo.
Essa Connection recém-criada pode ser usada depois, por exemplo, para preparar statements para acessar o banco a qual vc se conecta.

Elizeu_Santos

putz, pra mim isdso ainda é muito complicado. algum tutorial decente?

romarcio

Não sei se entendi o que você quis dizer, mas não acho que tenha nada complicado aqui:

public Connection getConnection() {  
}  
        System.out.println("Conectando ao banco");  
    try {  
        return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");  
} catch(SQLException e) {  
        throw new RuntimeException(e); 
}

Ele simplesmente criou um método chamado getConnection(), que poderia ter qualquer outro nome.
Dentro do método ele faz uma chamada ao método estático getConnection() da classe DriverMenager e passa os parâmetro necessários para a conexão.
E por fim ele retorna essa conexão com o banco de dados.

Dai no Dao ele só precisa chamar esse método criado que teria uma conexão.
Isso torna muito mais simples do que criar todo esse código de conexão em cada método que busca ou envia algo para o banco.

Elizeu_Santos

um amigo me explicou. e agora vc tbm ajudou a reforçar rsrs. desde ja agradeço.

Criado 19 de fevereiro de 2011
Ultima resposta 19 de fev. de 2011
Respostas 6
Participantes 3