Ajuda com um metodo para commit

Bom eu tenho um metodo que valida o login
ele verifica se a senha e o login são iguais
se sim ele vai fazer um update na tabela mudando o status " ONLINE " para 1
eu estou tentando entender mais sobre commit
gostaria de saber se estou mt errado nesse metodo?
como eu conseguiria fazer o rollback também
ficaria grato.

METODO:

public boolean validarSenha(Usuario u) {
	String sql = "SELECT * FROM usuario where login = ? and senha = ?";
	
	try {
		this.con = new ConnectionFactory().getConnection();
		
		PreparedStatement stmt = con.prepareStatement(sql);
		stmt.setString(1, u.getLogin());
		stmt.setString(2, u.getSenha());
		
		ResultSet rs = stmt.executeQuery();
		
		if(rs.next()) {             
			Usuario usuarioLogado = new Usuario(
				rs.getLong("id_usuario"),
				rs.getString("login"),
				rs.getString("senha"),
				rs.getInt("idpermissao"),
				rs.getString("nome"),
				rs.getBoolean("online"));
			
			con.setAutoCommit(false);
			
			Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
			String online = "UPDATE usuario SET online=1 WHERE id_usuario = " + Sessao.getInstancia().getUsuario().getId() + " ";
			stmt2.executeUpdate(online); 
			
			con.commit();
			aSessao.getInstancia().setUsuario(usuarioLogado);         
			
			stmt.close();
			rs.close();
			
			return true;
		} else {
			stmt.close();
			rs.close();
			return false;
		}
	} catch (SQLException ex) {
		Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
	}
	
	return false;
}

O que vc precisa é entender um pouco sobre Transações: https://www.mkyong.com/jdbc/jdbc-transaction-example/

Opa eu tinha esquecido de por o codigo
eu tou dando uma lida e tentando praticar e adequar o meu codigo, mas estou com algumas dificuldades.

Diga suas dificuldades que te ajudamos. (Se estiver dando algum erro, não esqueça de postar a exceção)

1 curtida

opa não deu nenhum error
só queria saber se a forma em que eu fiz o metodo está correta ou tem como melhorar.
eu editei com o codigo.
ah e sobre o rollback não imaginei como aplicar isso nessa ocasião.

1 curtida

Fiz algumas mudanças não sei qual é a melhor opção:

public boolean validarSenha(Usuario u) {
    String sql = "SELECT * FROM usuario where login = ? and senha = ?";
    try {
        PreparedStatement stmt = con.prepareStatement(sql);
        stmt.setString(1, u.getLogin());
        stmt.setString(2, u.getSenha());
        ResultSet rs = stmt.executeQuery();
        if (rs.next()) {             
            Usuario usuarioLogado = new Usuario(rs.getLong("id_usuario"), rs.getString("login"), rs.getString("senha"), rs.getInt("idpermissao"), rs.getString("nome"), rs.getBoolean("online"));;
            aSessao.getInstancia().setUsuario(usuarioLogado);  
            setOnline();
            stmt.close();
            rs.close();
            return true;
        }else{
        stmt.close();
        rs.close();
        return false;
        }
    } catch (SQLException ex) {
        Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);

    }
    return false;
}


public void setOnline(){
String online = "UPDATE usuario SET online=1 WHERE id_usuario = " + Sessao.getInstancia().getUsuario().getId() + " ";    
try {
    con.setAutoCommit(false);   
    PreparedStatement stmt = con.prepareStatement(online);
    stmt.executeUpdate(online); 
    con.commit();
    } catch (SQLException ex) {
        Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex);
    try {
        con.rollback();
    } catch (SQLException ex1) {
        Logger.getLogger(UsuarioDAO.class.getName()).log(Level.SEVERE, null, ex1);
    }
    }
}
1 curtida