Classe de verificação de login e senha

7 respostas
J

Sou iniciante em Java e durante algum tempo estou quebrando a minha cabeça tentando fazer minha classe de autenticação de login e senha funcionar.

Aqui vai o que eu já fiz.

Esse é meu método para consultar o usuário e senha

public static boolean consultar (String usuario, String senha){    
  
        boolean autenticado = false;  
        String sql;  
        sql = "select * from usuarios where login = ? and senha = ?";  
        PreparedStatement ps;  
  
        try{
            ps = con.prepareStatement(sql);  
            ps.setString(1, usuario);  
            ps.setString(2, senha);  
  
            ResultSet rs;  
            rs = ps.executeQuery(sql);  
  
            if (rs.next()) {  
                String loginBanco = rs.getString("usuario");  
                String senhaBanco = rs.getString("senha");  
                autenticado = true;  
            }  
  
            ps.close();  
return autenticado;  
  
        } catch (SQLException ex) {  
            System.out.println("Erro ao recuperar cliente/ senha");  
            return false;  
           // throw new RuntimeException();  
        }  
    }
E o código do botão que chama o método acima:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
      
        String usuario = txtUser.getText();
        String senha = new String(txtSenha.getPassword());
        
        boolean resposta = Conexao.consultar(usuario, senha);
        
        if (resposta == true) {
            telaPrincipal.jMenuBar1.setVisible(true);
            this.dispose();
        }
    }

O meu problema é que na classe "consulta" ele me mostra sempre o que está no catch, mas eu não consigo achar meu erro.
Desde já agradeço a atenção.

7 Respostas

fredericomaia10

Coloca ex.printStackTrace(); no seu catch, assim pode ver a descrição do erro.

Se não souber resolver, posta o erro aqui.

Você realmente possui uma coluna ‘usuario’ e outra ‘login’ no banco de dados?

J

Cara arrumei as colunas, na verdade é usuario. Mesmo assim não deu certo coloquei o printStackTrace e ele retornou o seguinte erro

“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘? and senha = ?’ at line 1”

Diz que minha query está errada né? Mas não consegui encontrar o erro. Por favor me ajudem ai

A

Um erro muito comum ao usar o preparedStatement está nessas linhas:

ps = con.prepareStatement(sql); 
//...
            rs = ps.executeQuery(sql);

Ao criar o prepared você já definiu a query. Não deve usar novamente no executeQuery. Utilize a versão dele que não recebe parâmetros.

Se esse programa for para uso de verdade recomendo que não armazene senha em texto puro também. Procure por hashing e salting de passwords.

Outra coisa, nunca esconda a mensagem da sua exception (como estava fazendo na primeira versão).
Sempre grave em log ou escreva em algum lugar o que aconteceu.

B

Veja se está conectando à instancia certa do banco, e se o nome da tabela e colunas estão certas.

J

AbelBueno:
Um erro muito comum ao usar o preparedStatement está nessas linhas:

ps = con.prepareStatement(sql); 
//...
            rs = ps.executeQuery(sql);

Ao criar o prepared você já definiu a query. Não deve usar novamente no executeQuery. Utilize a versão dele que não recebe parâmetros.

Se esse programa for para uso de verdade recomendo que não armazene senha em texto puro também. Procure por hashing e salting de passwords.

Outra coisa, nunca esconda a mensagem da sua exception (como estava fazendo na primeira versão).
Sempre grave em log ou escreva em algum lugar o que aconteceu.

Exatamente, eu vi isso logo depois de responder aqui. Mas mesmo assim muito obrigado pela atenção.

Eu gostaria que vocês me indicassem algum material para leitura sobre esse assunto, se possível.
Desde já, obrigado.

L

Leitura sugerida

http://www.caelum.com.br/apostila-java-web/bancos-de-dados-e-jdbc/

Abs

fredericomaia10

Isso mesmo. Apostilas da Caelum são ótimas.

Criado 17 de março de 2013
Ultima resposta 17 de mar. de 2013
Respostas 7
Participantes 5