Duvida com metodo logar / seu retorno

Olá a todos!

public boolean logar(String login, String senha) throws SQLException{
boolean status = false;
String sql = “SELECT * FROM usuario WHERE login=? AND senha=?”;
stmt = con.prepareStatement(sql);
stmt.setString(1, login);
stmt.setString(2, senha);

    rs = stmt.executeQuery();
    //System.out.println("rs: " +rs.next());
    if(rs.next()){
        status = true;
}
    stmt.close();
    rs.close();
    con.close();
   // return status;
    System.out.println("status" +status);
    return status;
}

criei o metodo logar acima e encontrei um certo problema.

o metodo vai no db e faz a busca de login and senha e se encontrar retorna true.
tudo bem até aí, mas quando eu coloquei o system.out.print(rs.next())… aparece true no console, mas a variavel status retorna com falso e não consigo logar no sistema por isso.

Entretanto se eu remover esse system.out.print ele funciona!

então gostaria de saber o porque? alguém pode responder isso???/

agradeço desde já!

O next() move o cursor do Statement. Se você o executa 2 vezes (uma no print, outra pra atribuir status), a segunda execução só vai funcionar se houver mais de um registro, o que não parece ser o caso. Por isso que funciona quando você comenta o println.

Se você quer mesmo exibir algo no console, atribua a variável status primeiro e use-a. Algo assim:

 rs = stmt.executeQuery();
// primeiro, é atribuído o status.
    if(rs.next()){
        status = true;
}
// println usa a variável status ao invés do rs.next(), senão vai exibir false
    System.out.println("rs: " +status); 

Abraço.