Pessoal, sou inciante em Java apesar de ja ter experiência em C++, Delphi e VB e estou tendo algumas dificuldades em desenvolver um sistema no qual estou trabalhando, eis o problema:
Estou começando pela parte de login da aplicação que deve checar se as credênciais (user e pass) existem e batem com os que estão na tabela do banco MYSQL, criei uma classe com os componentes gráficos e listeners dos objetos (login.java), uma que contem a conexão com o DB (ConBD.java) e estou empacado em uma outra classe que criei para que a “query” em si seja feita, vejam como está meu ConBD.java:
publicclassConBD{publicConBD()throwsClassNotFoundException{Connectioncon=null;StringURL="jdbc:mysql://127.0.0.1:3306/Giga";Stringusuario="root";Stringpass=XXXX;try{Class.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection(URL,usuario,pass);Statementstm=con.createStatement();}catch(SQLExceptionex){ex.printStackTrace();JOptionPane.showMessageDialog(null,"Erro na conexão com o Banco de Dados!","GigaPlast - We know plastic",JOptionPane.WARNING_MESSAGE);}}}
Agora como fazer para que eu possa usar a variável con na classe Loga.java para criar os Statements?
A classe acima seria apenas para obter uma connection (claro que precisa ser melhorada) mas a arquitetura seria esta…
Você deve utilizar uma outra classe que chamará esta para obter a conexão, depois, você criará o Statement na outra classe utilizando a Connection que será retornada desta e não na classe de conexão. Logo, seu projeto ficará bem mais claro e fácil de manter.
Você deve criar um método getConnection() e retornar o objeto Connection… Esta classe deve ser utilizada somente para conectar-se ao banco (ConnectionFactory)… Daí, com o objeto Connection retornado, você consegue fazer a consulta que quiser em outras classes…
Espero ter ajudado…
abraços
F
fernando.zambone
Estou obtendo o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.RuntimeException: Uncompilable source code - exception java.lang.ClassNotFoundException is never thrown in body of corresponding try statement
oq seria? Não consegui entender…
A
alissongarcia
Vc esta usando o exemplo do rodrigo ?
Se sim, esta faltando um throw ClassNotFoundException na assinatura do metodo ou um catch pra este mesmo exception, onde voce irá colocar vai depender de onde irá querer tratar o erro.
A classe acima seria apenas para obter uma connection (claro que precisa ser melhorada) mas a arquitetura seria esta…
Você deve utilizar uma outra classe que chamará esta para obter a conexão, depois, você criará o Statement na outra classe utilizando a Connection que será retornada desta e não na classe de conexão. Logo, seu projeto ficará bem mais claro e fácil de manter.
Porque não se deve criar a conexão no construtor da classe ?
Agradece,
Max Carvalho
F
fernando.zambone
Obrigado a todos pela ajuda, primeiros problemas já foram resolvidos mas agora tenho um novo:
ConBD é a classe que tem um metodo Conectar para abrir a conexão com o Banco de Dados e um método Desconectar para fechar a conexão com o BD e me retorna o getconnection desta conexão, oq torna possível que eu utilize este return para criar as querys de validação em uma outra classe. Certo?
Na classe Ident.java (que fará a validação de usuário e senha do sistema) eu tenho o seguinte:
public class Ident {
public void Ident(ConBD conexao) {
//JOptionPane.showMessageDialog(null,"teste1");
//conexao.Desconectar();
Statement stm = conexao.createStatement();
}
}
mas o problema é que deste jeito a IDE me fala que não existe o método createStatement na classe ConBD, como resolver?
nao seria boa pratica mas poderia colocar a variavel con como instancia publica, no seu exemplo ela eh variavel local nao é possivel invoca-la a partir de outra class.
M
markin1
Realmente do jeito que você está passando não vai existir o método createStatement, o motivo é que o parâmetro que você está passando é do tipo ConBD e não do tipo Connection o que você deve fazer é algo do tipo:
public class Ident {
public void Ident(ConBD conexao) {
//JOptionPane.showMessageDialog(null,"teste1");
//conexao.Desconectar();
Statement stm = conexao.Conectar().createStatement();
}
}
Acho que assim funciona
F
fernando.zambone
Eu achei que eu poderia usá-la desde que o método desse return dela quando uma outra classe chamasse este método, ou não? Na verdade eu ja estou usando ela em uma outra classe e aparentemente está funcionando.
LPJava
mas eu nao disse que nao ia funcionar, é questao de nomeacao o programador usa se achar conveniente. como por exemplo:
vc usa set se quiser seguir a nomeacao da Sun, ambos métodos compilam, claro nao na mesma classe devido eles terem o meso tipo de retorno e argumentos iguais.
Se vc usar o public em sua variavel de instancia vai compilar tranquilo ja que é um modificador valido para esse membro.
F
fernando.zambone
LPJava:
mas eu nao disse que nao ia funcionar, é questao de nomeacao o programador usa se achar conveniente. como por exemplo:
vc usa set se quiser seguir a nomeacao da Sun, ambos métodos compilam, claro nao estando na mesma classe devido eles terem o meso tipo de retorno e argumentos iguais.
Se vc usar o public em sua variavel de instancia vai compilar tranquilo ja que é um modificador valido para esse membro.