Tela de Login e senha

14 respostas
I

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...

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);
			
		}
	}
}

14 Respostas

L

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

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

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

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:

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);
			
		}
	}

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

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;
	}
Andre_Brito

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

caroline_colleto

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

I

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

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

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);
			
		}
	}
S

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

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

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
*/

I

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

I

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

Criado 25 de outubro de 2008
Ultima resposta 29 de out. de 2008
Respostas 14
Participantes 6