Pessoal, fiz uma classe de conexão em oracle, queria saber o que vocês acham…
packagebackupss;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjavax.swing.JOptionPane;publicclassConexaoBanco{Connectionconexao=null;/* Efetua conexão com o banco de dados */ConexaoBanco()throwsSQLException{try{Class.forName("oracle.jdbc.driver.OracleDriver");Stringurl="jdbc:oracle:thin:@localhost:1521:banco";Stringusername="";Stringpassword="";conexao=DriverManager.getConnection(url,username,password);JOptionPane.showMessageDialog(null,"Conexão efetuada com sucesso.");}catch(Exceptione){JOptionPane.showMessageDialog(null,e);}}/* Retorna conexão quando é requisitada */publicConnectiongetConnection(){returnconexao;}}
Minha idéia dela é chama-la no form principal e depois requisitar a conexão.
Na verdade pode.
Esse é o primeiro passo, criar uma classe utilitária.
Depois disso você pode evoluir sua estratégia usando um pool de conexões (seja implementando um, por fins puramente de aprendizado) ou usando um que já exista, como o nano-pool ou o famoso e largamente utilizado C3PO.
Sugiro uma pesquisa e estudo sobre o seu funcionamento.
Hebert_Coelho
Ta legal. Só não esquece de fechar a conexão depois. [=
Eu já trabalhei com sistemas que apenas conectam ao banco para alguma tarefa e depois matam a conexão.
Eu achei até melhor um cadin pq aí c não passa aperto de memória no server.
Uma idéia, pq vc ao invés de passar a string na unha vc não passar por parametro no web.xml? Assim vc poderia configurar sua classe de conexão Oracle para genérica.
Aceitaria MySQL, SQLServer.
Parabéns pela iniciativa, pelo código bem identado e comentado somente onde precisava ser!
[=
gismo
Deixa eu vêr se eu entendi…
Toda vez que eu chamar minha classe (mesmo que seja só pelo getConnection) ele vai tentar se conectar com o banco de dados formando várias tentativas de conexões?
onizuka.class
Como o colega acima citou, você está no caminho certo. Para desenvolver um bom design de software
o ideal é você sempre se ligar nos padrões, isto é saber distribuir as responsabiblidades de cada classe,
assim também como definir bem suas estruturas diminuindo o acoplamento e por ai vai…
A sua classe está boa, no entanto, ficaria melhor você construir uma fábrica de conexão.
Dê uma olha no padrão Factory e veja suas vantagens. Outra dica é colocar os parâmetros de connexão
separados da classe, como um arquivo de propriedades ou um xml. Desta forma, quando você for migrar
de uma ambiente de desenvolvimento para produção não necessitará recompilar suas classes.
gismo
Obrigado a todos, realmente tem em muito o que melhorar…
laudenpower
Jogue os dados da conexão (usuário, url e senha) em um arquivo properties. Prefiro esse do que xml pois é mais fácil de alterar por conta da estrutura do arquivo (chave=“valor”), nesse caso também cabe perguntar se a sua aplicação é web ou desktop, por que se for desktop penso que é mais vantajoso usar uma conexão apenas para o aplicativo todo, fechando ela apenas na finalização do software, muitos dirão que isso consome recursos do banco de forma desnecessária (pois uma conexão pode ficar aberta sem ser usada durante um tempo) mas diminui o overhead na sua aplicação pois criar conexões é algo que não sai barato para o programa e com apenas uma conexão você não precisa se preocupar com pools de conexão (a menos que esteja em ambiente concorrido por que ai você corre risco de ter processos diferentes usando a mesma conexão podendo ocasionar deadlock). Se sua aplicação for web existem formas melhores de conseguir uma conexão e a melhor penso eu, é pegar um pool como um colega já disse, pois é mais tranquilo de controlar conexões sendo que nesse caso é interessante fechar todas as conexões sem exceção. No geral sua classe está boa
Correção:
Pelo que vi sua classe utiliza um objeto do tipo JOptionPane sendo esse objeto do Swing nesse caso retorne apenas uma mensagem sem apresentar nesse objeto, pois não é interessante para não dizer boa prática colocar elementos da visão na camada de domínio.
Espero ter ajudado.
gismo
Refiz a classe mudando alguns conceitos e adicionei para pegar valores de um XML.
O que acharam?
packageexperimentosnetbeans;importjava.io.File;importjava.io.IOException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.util.Iterator;importjava.util.List;importjavax.swing.JOptionPane;importorg.jdom.Document;importorg.jdom.Element;importorg.jdom.JDOMException;importorg.jdom.input.SAXBuilder;publicclassConexaoBanco{Connectionconexao=null;Stringurl=null;Stringusername=null;Stringpassword=null;/* Se a conexão for nula, tenta se conectar, caso contrário somente retorna a conexão */publicConnectiongetConnection(){if(conexao==null){try{dadosXML();conexao=DriverManager.getConnection(url,username,password);JOptionPane.showMessageDialog(null,"Conexão efetuada com sucesso.");}catch(Exceptione){JOptionPane.showMessageDialog(null,e);}}returnconexao;}/* Fecha conexão */publicvoidcloseConnection(){try{conexao.close();JOptionPane.showMessageDialog(null,"Conexão fechada com sucesso.");}catch(Exceptione){JOptionPane.showMessageDialog(null,e);}}privatevoiddadosXML()throwsClassNotFoundException{Filef=newFile("DadosConexao.xml");SAXBuildersb=newSAXBuilder();Documentd=null;try{d=sb.build(f);}catch(JDOMExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}ElementdadosConexao=d.getRootElement();Listelements=dadosConexao.getChildren();Iteratori=elements.iterator();while(i.hasNext()){Elementelement=(Element)i.next();Class.forName(element.getChildText("classe"));url=element.getChildText("url");username=element.getChildText("username");password=element.getChildText("password");}}}
Só uma coisa que eu não consegui fazer…
Para pegar os valores do XML eu precisei fazer um List dos elementos, teria como eu pegar esses valores sem fazer um list? Ou seja, só utilizar o .getChildText() ?
Obrigado
nel
Boa tarde.
Não é por nada, mas não acha que está complicando um pouco mais do que deveria?
Utilize um arquivo com extensão properties, exemplo: conexao.properties.
A partir dai utiliza FileInputStream() ou outra classe do genero para ter acesso a este arquivo properties e em seguida extrair as informações.
Exemplo:
conexao.properties
url = ....
user = ....
password = ...
Ai depois de ter acesso via Input do arquivo, basta fazer...
É por ai. Pode melhor e muito isso, deixa esta variavél como "global" em sua classe e verificar se ela é nula e somente se for você gera uma instância dela.
Está ai uma dica. Muito mais simples que com XML, pelo menos eu acho.