Tela de Login e senha

Caros,

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…

[code]public class AutenticarSist extends Login{
/**
*
*/
private static final long serialVersionUID = 1L;
protected static Statement MeuState = null;

public void conecta(){
	
	try
	{		
		String Url = "jdbc:odbc:RH";
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		Connection Conexao = DriverManager.getConnection(Url);
		MeuState = Conexao.createStatement();
		JOptionPane.showMessageDialog(null,"conectado ","Mensagem",1);
		
	}
	catch(ClassNotFoundException ex)
	{
		JOptionPane.showMessageDialog(null,"Driver JDBC-ODBC não encontrado ","Mensagem",1);
		System.exit(0);
	}
	catch(SQLException ex)
	{
		JOptionPane.showMessageDialog(null,"Erro de SQL","Erro",0);
		System.exit(0);
	}

}
public void autenticar(String login, String senha){

	try{

		String SQL = "SELECT login,senha FROM USUARIO WHERE login = '"+login+"' and senha = '"+senha+"'";
		ResultSet rs = MeuState.executeQuery(SQL);
		rs.next();
		
		if(login.equals(rs.getString(login)) || senha.equals(rs.getString(senha))){
			
			TelaPrincipal tela = new TelaPrincipal();
			tela.setVisible(true);
		}
		
		rs.close(); 
		
	}
	
	catch(SQLException e){
		

		JOptionPane.showMessageDialog(null,"Login Incorreto!","Erro",1);
		
	}
}

}[/code]

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.

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)

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.

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:

if(login.equals(rs.getString(login)) || senha.equals(rs.getString(senha)))

E segue abaixo o metodo completo autenticar:

[code]public void autenticar(String login, String senha){

	try{

		String SQL = "SELECT login,senha FROM USUARIO WHERE login = '"+login+"' and senha = '"+senha+"'";
		ResultSet rs = MeuState.executeQuery(SQL);
		rs.next();
		
		if(login.equals(rs.getString(login)) || senha.equals(rs.getString(senha))){
			
			TelaPrincipal tela = new TelaPrincipal();
			tela.setVisible(true);
		}
		
		rs.close(); 
		
	}
	
	catch(SQLException e){
		

		JOptionPane.showMessageDialog(null,"Login Incorreto!","Erro",1);
		
	}
}[/code]

Para ajudar tem ai também o codigo do botão Logar e passa os parametros para a classe AutenticarSist:

[code]private JButton getBtLogar() {
if (btLogar == null) {
btLogar = new JButton();
btLogar.setBounds(new java.awt.Rectangle(30,100,80,25));
btLogar.setText(“Logar”);
btLogar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {

				AutenticarSist logar = new AutenticarSist();
				logar.autenticar(txLogin.getText(),txSenha.getText());
				
				
			}
		});
	}
	return btLogar;
}[/code]

Antes de chamar autenticar, imprimir os getText() (tanto do login quanto da senha) e poste o que aparece.

Oi,

o erro está aqui:


          if(login.equals(rs.getString(login)) || senha.equals(rs.getString(senha))){                      
                TelaPrincipal tela = new TelaPrincipal();   
                tela.setVisible(true);   

esse comando deveria estar asim

if(login.equals(rs.getString([color=orange]“login”[/color])) || senha.equals(rs.getString([color=orange]“senha”[/color]))){
TelaPrincipal tela = new TelaPrincipal();
tela.setVisible(true);

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

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

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

[code]public void autenticar(String login, String senha){

	try{

		String SQL = "SELECT login,senha FROM USUARIO WHERE login = '"+login+"' and senha = '"+senha+"'";
		ResultSet rs = MeuState.executeQuery(SQL);
		rs.next();
		
		if(login.equals(rs.getString("login")) || senha.equals(rs.getString("senha"))){
			
			TelaPrincipal tela = new TelaPrincipal();
			tela.setVisible(true);
		}
		
		rs.close(); 
		
	}
	
	catch(SQLException e){
		

		JOptionPane.showMessageDialog(null,"Login Incorreto!","Erro",1);
		
	}
}[/code]

Nossa que coincidencia, eu tbm to com esse mesmo problema hhuahuauhauhuu

ai quem puder ajudar agradecemos muito!!!

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.

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.

oi,
vc esta usando Statement?
se tiver muda para PreperedStatement (eh mais facil de trabalhar), e aproposito muda o select

dai o codigo ficaria assim

PreperedStatement = Connection.preparedStatement(“Select count(idTabela) as qtd from tabela where campo1 = ? and campo2 = ?”);
PreperedStatement.setString(1,variavel1);
PreperedStatement.setString(2,variavel2);

Resultset = PreperedStatement.executeQuery();

ResultSet.next();

if(ResultSet.getInt(“qtd”) == 1)

/* se n funcionar desse modo
int a = Integer.parseInt(ResultSet.getString(“qtd”));

if(a == 1)
seus comandos
*/

Galera…

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

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.

Vlw a todos pela ajuda.

At.
Italo Santos