Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Mesmo resultado em metodo de validação de login

Bom dia,

estou com um problema para formular o método de validação de login.

public Agentes login(String login, String senha) throws SQLException {

        Connection con = ConecctionMySql.getConnection();

        Statement smt = con.createStatement();

        Agentes agentes = new Agentes();

        ResultSet rs = smt.executeQuery(" select login, senha from agentes ");

        while (rs.next()) {

            if (rs.getString("login").equals(login) && rs.getString("senha").equals(senha)) {
                agentes.setId("login");
                agentes.setSenha("senha");
                return agentes;
            }
            else{
                System.out.println("usuario nao existe");
                return agentes;
            }
        }
        return agentes;
    }

classe de testes:

public class TestaDao {
    public static void main(String[] args) throws SQLException {
        AgentesDao dao = new AgentesDao();    

        dao.login("1", "1");
    }
}

fiz com 1 para ter certeza que não estava nenhuma letra incorreta, mas ele sempre me devolve : usuario nao existe.

O que poderia ser isso?

obrigado.

4 respostas

Ola Gabriel, tudo bem ?

Imagino que esteja querendo buscar os dados pra autenticação de um usuário a partir de form de login.

Nesse caso, uma dica, percebi que você faz a seguinte consulta: select login, senha from agentes. Essa consulta traz todos os registros da tabela de agentes, para posteriormente verificar se logins e senhas estão de acordo com o registro, até encontrar o usuário.

Lembre-se que podemos já trazer os dados filtrados direto da base, ganhando assim facilidade de escrita e performance. Tente fazer com que sua consulta ja busque por um agente de login específico (login deve ser unique) - algo como select * from agentes where login = ?.

Assim o banco ja trará um único registro da base. Quando o registro estiver em mãos (ja sabe que o login bateu), aí sim verifique se as senhas estão de acordo e devolva o agente autenticado em caso de sucesso.

Outra coisa, verifique se os dados estão corretamente inseridos no banco, e de acordo com os parâmetros recebidos pelo método. Pode ser que realmente não exista registro com tais dados no banco.

Espero ter ajudado. Abraço!

Rafael Boa tarde,

muito obrigado cara pela ajuda realmente mais inteligente fazer uma busca especifica do que buscar todos e comparar,

só teve um problema, quando eu pesquiso o usuario com login e senha 1 ele me devolve a mensagem que coloquei la:

public Agentes login(String login, String senha) throws SQLException {

        Connection con = ConecctionMySql.getConnection();

        Statement smt = con.createStatement();

        Agentes agentes = new Agentes();

        ResultSet rs = smt.executeQuery(" select * from agentes where login = " + login);

        while (rs.next()) {

            if (rs.getString("senha").equals(senha)) {
                agentes.setId("login");
                agentes.setSenha("senha");
                System.out.println("usuario cadastrado: " + login);
                return agentes;
            }
            else{
                System.out.println("usuario nao existe");
                return agentes;
            }
        }
        return agentes;
    }

Me devolve o login do usuário, agora se eu coloco um usuário com login e senha normais, com login em letras ele nao me devolve nada, nenhuma mensagem de erro.

sabe o que pode ser?

obrigado.

solução

Oi Gabriel,

Tente definir a query quando chama o método conn.prepareStatement('suaQuery'). Ele não está preparando o Statement corretamente, e está executando uma query vazia.

public Agente login(String login, String senha) throws SQLException {
    Connection con = ConecctionMySql.getConnection();

    PreparedStatement stmt = con.prepareStatement("select * from agentes where login = ?");
    stmt.setString(1, login);

    ResultSet rs = stmt.executeQuery();

Daí em frente é a mesma coisa. Pegar o resultSet e extrair os registros, criar o objeto de Agente (Lembre-se de usar o singular se a classe não representa de fato uma coleção de agentes) e devolver o agente autenticado.

Faça o teste!

Rafael deu certinho valeu mesmo.

bom feriado