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.
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:
O codigo que for usar essa getConnection() não vai ficar sabendo de muitos detalhes de implementação, como SQLException poderia revelar.
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:
publicConnectiongetConnection(){}System.out.println("Conectando ao banco");try{returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(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.