Quero criar uma classe cuja função seja conectar com um Banco de Dados(independente que qual seja). Vinha dúvida é a seguinte: quando instancio um objeto do tipo Connection, esse objeto estabelece uma conexão com o banco de dados, mas como saber se a conexão deu tudo certo.
Essa é a primeira dúvida. Estou iniciando em Java, e estou arriscando a conexão com o banco de dados, importei umas API’s para a conexão, mas naum sei o que cada um faz…se puderem me explicar tb…agradeço…srsrs
vlw…
abaixo segue o como está ficando meu código…só quero lembrar que o método ‘fazerConexao’ ainda naum está pronto, pois preciso justamente do esclarecimento da dúvida sobre o objeto Connection para termina-lo. A idéia é que esse método retorne um valor booleano para saber se houve ou não conexão.
Mais uma vez…vlw
//Programa que realiza a conexão do Aplicativo com o Banco de Dados especificado/* +-----------------------------------------------------------------+ |API's necessárias para a conexão com o Banco de Dados| +-----------------------------------------------------------------+*/importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConectarComOBanco{privateStringdrive;privateStringurl;/* +------------------------------------------------------------+ |Métodos que inserem valores nos atributos do objeto| +------------------------------------------------------------+ */publicvoidsetDrive(Stringdrive){this.drive=drive;}//Fim do método setDrivepublicvoidsetUrl(Stringurl){this.url=url;}//Fim do método setUrl/* +-------------------------------------------------+ |Métodos que retornam os valores do objeto| +-------------------------------------------------+ */publicStringgetDrive(){returnthis.drive;}//Fim do método getDrivepublicStringgetUrl(){returnthis.url;}//Fim do método getDrive/* +--------------------------------------------------------------------------------+ |Método que realiza a conexão com o Bancos de Dados especificado pelo drive e url| +--------------------------------------------------------------------------------+ */publicbooleanfazerConexao(Stringusuario,Stringsenha){//Gerencia a conexãoConnectionconnection=null;//Conecta-se no banco de dadostry{//Carrega a classe de driver do banco de dadosClass.forName(this.drive);//Estabelece conexão com o banco de dadosconnection=DriverManager.getConnection(this.url,usuario,senha);}//Fim do trycatch(SQLExceptionsqlException){sqlException.printStackTrace();System.exit(1);}//Fim do catchcatch(ClassNotFoundExceptionclassNotFound){classNotFound.printStackTrace();System.exit(1);}//Fim do catchfinally{//Assegura que a instrução e conexão são fechadas adequadamentetry{connection.close();}//Fim do trycatch(Exceptionexception){exception.printStackTrace();System.exit(1);}//Fim do catch}//Fim do Finally}//Fim do método fazer Conexao}//Fim da classe ConectarComOBanco
Se a conexão com o banco de dados não for bem sucedida, uma SQLException será lançada, e o código do catch referente ao tratamento desta exception será executado, e depois o finally.
Portanto, se o seu método fazerConexao() nao lançar nenhuma exception, a conexão foi bem sucedida.
T
Thiago_Dantas
entaum naum a necessidade de esse método retorna nada naum eh?
soh para esclarecer melhor…srsrs
erickcellani
esse método deveria retornar uma conexão neh ???
se a intenção era usar a conexão em outro lugar, vc naum poderia fazer um finally fechando a conexão!.!.!
publicstaticConnectionconnect()throwsSQLException,IOException{Connectioncon=null;try{Class.forName(Constantes.DB_NAME);con=DriverManager.getConnection(Constantes.DB_URL,Constantes.DB_LOGIN,Constantes.DB_PASS);}catch(ClassNotFoundExceptione){System.out.print("\nNão foi possível estabelecer conexão.");e.printStackTrace();}returncon;}
assim... eu posso chamar o metodo... e terei a minha conexão...
depois que vc usar a sua conexão vc fecha!.. mas isso deve ser feito no lugar que vc usou a conexão
se preferir.. vc pode criar um metodo que fecha a conexão!
Então thiago,
para melhor robustez no seu código, você pode usar o Design Pattern Factory para manipular a conexão com o banco de dados.
Procure a apostila da Caelum, fj-21, ela lhe mostrará como fazer isso de uma maneira muito produtiva, essa apostila é livre para download no site da Caelum http://www.caelum.com.br/caelum/cursos.jsp.
T
Thiago_Dantas
vlw leandros pela dica da apostila…
mas se liga erickcellani, pode me esclarecer uma coisa…pq vc está usando o método como ‘static’?
pode me explicar…por favor?
só para conhecimento…
vlw
erickcellani
rsrs.... só para poder chamar ele assim:
/* * (non-Javadoc) * @see br.com.faculdade.DAO.interfaces.ArquivosDAO#insertArquivo(java.lang.String, java.lang.String, java.lang.String, java.lang.String) */publicvoidinsertArquivo(StringuserName,Stringarquivo,Stringtamanho,Stringendereco)throwsIOException,SQLException{try{//Faz a conexão.con=DBConnection.connect();//**************\//Chama a Stored Procedure.stmt=con.prepareCall(Constantes.PRC_ARQUIVOS_INSERT);stmt.setString(1,userName);stmt.setString(2,arquivo);stmt.setString(3,tamanho);stmt.setString(4,endereco);//Faz o insert.stmt.execute();}catch(SQLExceptione){System.out.println("Erro ao inserir o arquivo: ");e.printStackTrace();}finally{//Fecha as conexões.DBConnection.closeStatement(con,stmt);}}
rsrs... sem mtos segredos!
naum preciso instanciar ele!
T
Thiago_Dantas
a idéia de retornar uma conexão…foi massa…naum havia pensado nisso, valew mesmo…
o único problemas que encontrei foi quando declarei o método como ‘static’, o compilador acusou o erro:
entaum tirei o ‘static’, e tudo deu certo…
alguém pode me explicar pq isso aconteceu…
Obs.: desculpe ser chato perguntando o pq disso ou pq daquilo, mas eh que acho importante ter o contexto das coisas na cabeça…saca?
erickcellani
mostra como ficou a sua classe…
T
Thiago_Dantas
assim:
//Programa que realiza a conexão do Aplicativo com o Banco de Dados especificado/* +-----------------------------------------------------+ |API's necessárias para a conexão com o Banco de Dados| +-----------------------------------------------------+*/importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importjava.io.IOException;publicclassConectarComOBanco{privateStringdrive;privateStringurl;/* +---------------------------------------------------+ |Métodos que inserem valores nos atributos do objeto| +---------------------------------------------------+ */publicvoidsetDrive(Stringdrive){this.drive=drive;}//Fim do método setDrivepublicvoidsetUrl(Stringurl){this.url=url;}//Fim do método setUrl/* +-----------------------------------------+ |Métodos que retornam os valores do objeto| +-----------------------------------------+ */publicStringgetDrive(){returnthis.drive;}//Fim do método getDrivepublicStringgetUrl(){returnthis.url;}//Fim do método getDrive/* +--------------------------------------------------------------------------------+ |Método que realiza a conexão com o Bancos de Dados especificado pelo drive e url| +--------------------------------------------------------------------------------+ */publicConnectionfazerConexao(Stringusuario,Stringsenha)throwsSQLException,IOException{//Gerencia a conexãoConnectionconexao=null;//Conecta-se no banco de dadostry{//Carrega a classe de driver do banco de dadosClass.forName(this.drive);//Estabelece conexão com o banco de dadosconexao=DriverManager.getConnection(this.url,usuario,senha);}//Fim do trycatch(ClassNotFoundExceptione){System.out.println("Não foi possível estabelecer conexão.");e.printStackTrace();}//Fim do catchreturnconexao;}//Fim do método fazer Conexao}//Fim da classe ConectarComOBanco
von.juliano
O erro indica que as variáveis do seu método não são estáticas. Basicamente, eu crio a classe de conexão assim (MS SQL):
entaum…
tinha pensado dessa maneira…
porém…assim…jah vou conectar com um banco jah estabelecido, no caso o MySql, não queria dessa maneira…
quero que meu código se conecte com qualquer banco…distinguindo os bancos pelos seus atributos, drive …sacou?