Retorno de metodo booleano

10 respostas
programaçãojava
C

Boa tarde
Estou fazendo um teste de login e durante o metodo se o login for verdade uma variavel do tipo booleana recebe true, porém o método sempre retorna false, alguém sabe me dizer o porque?
E sim ele testa todos que estão no db antes de retornar.

Código abaixo

public class TesteDB {

/**
 *
 */
public Boolean acesso;

public TesteDB() {

}

/**
 *
 * @param nome
 * @param senha
 * @return
 */
public Boolean TesteLogin(String nome, String senha) {
    try {
      // DBc db = new DBc();

        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        Connection cn = DriverManager.getConnection("jdbc:derby://localhost:1527/javadb");
        Statement stmt = cn.createStatement();

        ResultSet st = stmt.executeQuery("SELECT * FROM FUNCIONARIOS");

        
            while (st.next()) {

                if (nome.equals(st.getString("LOGIN")) && senha.equals(st.getString("SENHA"))) {
                    acesso = true;
                    
                } else {
                    acesso = false;
                }
            }
        

    } catch (Exception t) {
        t.printStackTrace();
    }
    System.out.println(acesso + " no return");
    return acesso;
}

}

10 Respostas

M

Quantos funcionarios você tem? Pois você esta trazendo todos do banco.

Se você tiver 3 e o ÚLTIMO tiver uma senha inválida, a variável vai ficar false

F

Isso é por que tá rodando dentro de um while, ou seja, se o último valor der false significa que tudo sera invalidado.

C

E como eu deveria ter então?

C

No caso 2

C

Eu também to tento um erro com um método que retorna um statement, ta retornando nulo, por que?

Método abaixo:

public class DBc {

Statement stmt;

/**
 *
 * @return
 */
public Statement  Connection() throws ClassNotFoundException, SQLException {
    
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");           
        Connection cn = DriverManager.getConnection("jdbc:derby://localhost:1527/javadb");  
        System.out.println("inicio");
        stmt = cn.createStatement();
        System.out.println("feito");
   
    return stmt;
}

}

Esse método é usado nesse outro método acima

M

Pq as configurações de acesso estão erradas.

Verifique a url, se tiver usuario e senha você passa como parâmetro também

C

ai que ta, não tem, tanto que antes quando eu estava declarando a conexao direto no metodo de teste, estava conectando

F

amigo você está fazendo isso dentro de um laço, entenda que o laço irá verificar todos os retornos do banco de dados se o ultimo retorno de false, mesmo algum já tiver dado true, o retorno do método será sempre false;

F

Não sei porque você quer retorna um statement no método, faz muito tempo que não uso jdbc puro, existe vários tutoriais aqui no gui e na internet de como fazer, dê uma olhada, tente depurar o código na sua IDE

S
public class TesteDB {

    public boolean testeLogin(String nome, String senha) {
        try {
            Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
            Connection cn = DriverManager.getConnection("jdbc:derby://localhost:1527/javadb");
            Statement stmt = cn.createStatement();
            ResultSet result = stmt.executeQuery("SELECT LOGIN, SENHA FROM FUNCIONARIOS");
            while (result.next()) {
                if (nome.equals(result.getString("LOGIN")) && senha.equals(result.getString("SENHA"))) {
                    return true;
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }
}
Criado 14 de dezembro de 2018
Ultima resposta 17 de dez. de 2018
Respostas 10
Participantes 5