Sou novo aqui no fórum e estou com um problema... Estou desenvolvendo um sistema de controle de RH que possui uma tela de login e senha antes de abrir o sistema.
Eu possuo uma classe que defina a tela e outra classe que conecta no banco e faz autenticação do usuário no sistema, se os dados estiverem corretos a tela principal do sistema é instanciada.
Porém toda vez que digito Login e senha e mando compilar o Eclipse entra em Debug, segue abaixo o código da classe de autenticação:
Desde já agradeço...
publicclassAutenticarSistextendsLogin{/** * */privatestaticfinallongserialVersionUID=1L;protectedstaticStatementMeuState=null;publicvoidconecta(){try{StringUrl="jdbc:odbc:RH";Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");ConnectionConexao=DriverManager.getConnection(Url);MeuState=Conexao.createStatement();JOptionPane.showMessageDialog(null,"conectado ","Mensagem",1);}catch(ClassNotFoundExceptionex){JOptionPane.showMessageDialog(null,"Driver JDBC-ODBC não encontrado ","Mensagem",1);System.exit(0);}catch(SQLExceptionex){JOptionPane.showMessageDialog(null,"Erro de SQL","Erro",0);System.exit(0);}}publicvoidautenticar(Stringlogin,Stringsenha){try{StringSQL="SELECT login,senha FROM USUARIO WHERE login = '"+login+"' and senha = '"+senha+"'";ResultSetrs=MeuState.executeQuery(SQL);rs.next();if(login.equals(rs.getString(login))||senha.equals(rs.getString(senha))){TelaPrincipaltela=newTelaPrincipal();tela.setVisible(true);}rs.close();}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Login Incorreto!","Erro",1);}}}
Ele entra em debug mas diz que tem alguma coisa de errado com o fonte? se sim, qual o erro? e qual a linha?
Se não tente compilar com outra IDE, ou até mesmo no dos (javac), para ver se você não marcou algum ponto (BreakPoint) sem querer.
I
itlsml
Não diz que tem nada de errada com o Fonte, mas quando compila da o seguinte erro após o Debug:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at sist_rh.AutenticarSist.autenticar(AutenticarSist.java:41)
at sist_rh.Login$1.actionPerformed(Login.java:77)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
L
lcoelhoj
Você deve estar tentando usar um método de algum objeto nao inicializado.
Poste a linha 41 do método abaixo:
at sist_rh.[b]AutenticarSist.autenticar/b
Ou
Se nao estou pensando besteira, certa vez aconteceu algo parecido comigo, quando fui fazer a conexão com o banco de dados. Corrigi o problema ajustando o path do Java no meu pc, ou jogando os arquivos para dentro do “bin” da onde se localiza o java.
I
itlsml
Creio que isso não seja o Path pois o mesmo erro ocorreu em 3 maquina diferentes.
Segue abaixo o codigo da linha 41 do metodo autenticar da classe AutenticarSist:
publicvoidautenticar(Stringlogin,Stringsenha){try{StringSQL="SELECT login,senha FROM USUARIO WHERE login = '"+login+"' and senha = '"+senha+"'";ResultSetrs=MeuState.executeQuery(SQL);rs.next();if(login.equals(rs.getString(login))||senha.equals(rs.getString(senha))){TelaPrincipaltela=newTelaPrincipal();tela.setVisible(true);}rs.close();}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Login Incorreto!","Erro",1);}}
Para ajudar tem ai também o codigo do botão Logar e passa os parametros para a classe AutenticarSist:
Precisa das aspas, porque vc quer verificar o resultado de campos do seu select, então vc tem que identificar a coluna da comparação no caso login
Diz depois se deu certo
I
itlsml
Caroline,
O que vc passou é muito pertinente mas não resolveu o erro… mesmo acrescentando as aspas o mesmo erro ainda ocorre…
Tentei alterar o codigo para “getPassword” mas ocorre o mesmo.
AutenticarSist logar = new AutenticarSist();
logar.autenticar(txLogin.getText(),txSenha.getText());
Já não sei mais o que fazer… nem meu professor de java na facu conseguiu encontrar o erro… =P
Se puderem me ajudar, fico agradecido
I
itlsml
Estava depurando o codigo pra ver onde possivelmente estaria o erro e no Debug após passar do breakpoint da linha do ResultSet da o erro.
Não entendi por que daria erro no momento de retornar o resultado nas variáveis... =S
publicvoidautenticar(Stringlogin,Stringsenha){try{StringSQL="SELECT login,senha FROM USUARIO WHERE login = '"+login+"' and senha = '"+senha+"'";ResultSetrs=MeuState.executeQuery(SQL);rs.next();if(login.equals(rs.getString("login"))||senha.equals(rs.getString("senha"))){TelaPrincipaltela=newTelaPrincipal();tela.setVisible(true);}rs.close();}catch(SQLExceptione){JOptionPane.showMessageDialog(null,"Login Incorreto!","Erro",1);}}
S
shimura
Nossa que coincidencia, eu tbm to com esse mesmo problema hhuahuauhauhuu
ai quem puder ajudar agradecemos muito!!!
Andre_Brito
Oi.
Discorde da caroline. Você não deve fazer .equals(“login”) porque login é um parâmetro (veja na assinatura do método).
Tente o seguinte.
Em vez de
String SQL = "SELECT login,senha FROM USUARIO WHERE login = '"+login+"' and senha = '"+senha+"'";
ResultSet rs = MeuState.executeQuery(SQL);
rs.next();
Faça
String SQL = "SELECT login, senha FROM USUARIO WHERE login ~* '" + login + "' and senha ~* '"+senha+"'";
ResultSet rs = MeuState.executeQuery(SQL);
if (rs == null) System.out.println("rs null");
rs.next();
Poste a saída. E não esqueça de arrumar o equals, se você concordar com o que eu falei.
M
m4rcu5
A linha 41 no seu primeiro post é tela.setVisible(true). Verifique se o seu container na classe TelaPrincipal está instanciado e se o mesmo adiciona todos os componentes que você precisa.
caroline_colleto
oi,
vc esta usando Statement?
se tiver muda para PreperedStatement (eh mais facil de trabalhar), e aproposito muda o select
Vou fazer o seguinte… Vou verificar com alguem da minha sala na facu que conseguiu fazer essa joça rodar e posto aqui a solução. Pq infelizmente nenhuma das tentativas deu certo…
Muito obrigado até o momento…
Volto com a solução.
=D
I
itlsml
Caros,
O erro ocorria pois a variável “MeuState” não estava declarada como Global, ou seja, como no código tinha 2 métodos a variável ficava valida somente para um deles.
Para resolver isso declarei a variável “private static Statement MeuState;” e coloquei a conexão e a query no mesmo metodo.