Deletar registros de parcelas criadas em uma tabela

Minha experiência no java não é muito grande, e estou com dificuldade de criar um botão para que elimine todos o dados da tabela.

Na tabela possui o código como auto increment bem como campos de data, valor de cada parcela bem como o numero das parcelas o principal o código do cliente que se repede em todas as parcelas bem como os outros campos.

Usando o netbeans não estou conseguindo fazer um IF que le todas as parcelas e delete de um determinado cliente informado.

a deleção de cada um por vez eu fiz conforme abaixo o fonte:

  private void excluirParcela() {
    int linha = tbBaixaParcela.getSelectedRow();
    String nome = (String) tbBaixaParcela.getValueAt(linha, 1);
    int parcela = (Integer) tbBaixaParcela.getValueAt(linha, 3);
    int codigo = (Integer) tbBaixaParcela.getValueAt(linha, 0);
    //pegunta se realmente deseja excluir
    int opcao = JOptionPane.showConfirmDialog(this, "Deseja excluir a parcela do: \n "
            + nome + "\n " + "Parcela: " + parcela + " ?", "Atenção", JOptionPane.YES_NO_OPTION);

    //se sim exclui, se não não faz nada    
    if (opcao == JOptionPane.OK_OPTION) {
        if (controllerParcela.excluirParcelaController(codigo)) {
            JOptionPane.showMessageDialog(this, "Parcela excluída com sucesso!");
            carregarBaixas();
        } else {
            JOptionPane.showMessageDialog(this, "Erro ao e os dados!", "ERRO", JOptionPane.ERROR_MESSAGE);
        }
    }
}

Não há nada de mysql no código apresentado…

Estou com dificuldade no java em fazer um (for) que leia todas as parcelas de um determinado cliente e efetue a deleção.

A intenção é que quando efetuar o cancelamento de uma venda , seja verificado se houve alguma data de pagamento de alguma parcela, caso não tenha deletar todas as parcelas referente ao cliente da venda cancelada.

Porque você pega cada campo individualmente?
Você não tem uma lista de objetos da classe Parcela?

private void excluirParcela() {
    listaParcelas = controllerParcela.getListaParcelaController();
    int cont = listaParcelas.size();
    for (int i = 0; i < cont; i++) {
        listaParcelas.get(i).getNumeroParcela();
        controllerParcela.excluirCodParcelaController(i);
        System.out.println(i);
    }
    System.out.println("Fim");
}

Fiz este comando como teste.
Esta deletando as parcelas no banco de dados, mas a ultima de cinco não está.
Coloquei o i para iniciar no um, não resolveu.

o meu listaParcelas está mostrado cinco parcelas, conforme o print que dou informando 5 no System.out.println(cont);

Como está sendo gravado no banco de dados:

CREATE TABLE parcela (
codigo int(11) NOT NULL,
cod_cliente int(11) NOT NULL,
valor_entrada float NOT NULL,
valor_parcelado float NOT NULL,
valor_venda float NOT NULL,
valor_total float NOT NULL,
numero_parcela int(11) NOT NULL,
valor_parcela float NOT NULL,
data_vencimento varchar(15) NOT NULL,
data_pagamento varchar(15) NOT NULL,
tipo_pagamento int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


– Extraindo dados da tabela parcela

INSERT INTO parcela (codigo, cod_cliente, valor_entrada, valor_parcelado,
valor_venda, valor_total, numero_parcela, valor_parcela, data_vencimento, data_pagamento, tipo_pagamento) VALUES
(31, 1, 79.99, 600, 679.99, 600, 1, 120, ‘11/11/2020’, ‘null’, 1),
(32, 1, 79.99, 600, 679.99, 600, 2, 120, ‘11/12/2020’, ‘null’, 1),
(33, 1, 79.99, 600, 679.99, 600, 3, 120, ‘11/01/2021’, ‘null’, 1),
(34, 1, 79.99, 600, 679.99, 600, 4, 120, ‘11/02/2021’, ‘null’, 1),
(35, 1, 79.99, 600, 679.99, 600, 5, 120, ‘11/03/2021’, ‘null’, 1);

O que fazes aqui?

Se eu entendi sua pergunta.
este comando exclui a parcela no banco de dados.
Seque o model, dao e controller:

public class ModelParcela {

private int codigo;
private int codCliente;
private int tipoPagamento;
private float valorEntrada;
private float valorParcelado;
private float valorVenda;
private float valorTotal;
private int numeroParcela;
private float valorParcela;
private String dataVencimento;
private String dataPagamento;

public boolean excluirCodParcelaDAO(int pCodigo) {
    try {
        this.conectar();
        return this.executarUpdateDeleteSQL(
                "DELETE FROM parcela "
                + " WHERE "
                + "numero_parcela = '" + pCodigo + "'"
                + ";"
        );
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    } finally {
        this.fecharConexao();
    }
}

public boolean excluirCodParcelaController(int pCodigo) {
    return this.daoParcela.excluirCodParcelaDAO(pCodigo);
}

Isto funciona quanto tens mais de um cliente? Vais apagar a parcela 1 de todos os clientes…

O que tens de fazer é usar um identificador único da compra que estás a parcelar (se cod_cliente for novo a cada compra pode ser esse campo senão terás de ter um outro). Para remover todas as parcelas fazes o delete da seguinte forma:

"DELETE FROM parcela WHERE cod_cliente = " + codCliente

E não deves usar esta concatenação de Strings. Usa PreparedStatement.

Fiz uma alteração que deu certo, mas não sei se está correto.

private void excluirParcela() {
    int cont = (listaParcelas.size() +1);
    for (int i = 0; i < cont; i++) {
        controllerParcela.excluirCodParcelaController(i);
        System.out.println(i);
        System.out.println("Parcela" + cont);
    }
}

o “cont” estava demonstrando cinco parcelas e ao excluir estava ficando sempre a ultima parcela que era a “quinta”.
Assim coloquei “+ 1” no “cont” para demostrar seis parcelas e ao excluir, removeu todas as parcelas.

Está certo isso?
Você está mandado o seu controller excluir a parcela i.
Não deveria excluir a partir do código, dessa forma?

int codigo = listaParcelas.get(i).getNumeroParcela();
controllerParcela.excluirCodParcelaController( codigo );

Obrigado, ficou perfeito
Muito grato, pela ajuda.
:+1:

1 curtida