Retorno de metodo booleano

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

}

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

1 curtida

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

E como eu deveria ter então?

No caso 2

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

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

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

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

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;

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

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