Não consigo subtrair um valor do banco de dados

Olá pessoal, sou novo em programação e estou tentando fazer um sistema que gerencie um estoque, ele ta cadastrando, alterando, excluindo tudo certinho, ai agora to fazendo a parte de registrar vendas, to usando duas tabelas uma que mostra os produtos disponíveis e outra que mostra as vendas feitas, o usuário clica no item que ele quer vender, os dados são puxados para as jTextField ele altera a quantidade, clica em registrar venda e a venda é registrada na tabela de cima, até ai está tudo funcionando certinho, só não estou conseguindo subtrair a quantidade que tem no estoque pela quantidade da venda, vou mandar os códigos abaixo, se puderem me ajudar, agradeço :slight_smile:

private void confirmarVenda() {
try {
VendaVO vVO = new VendaVO();
ProdutoVO pVO = new ProdutoVO();

        vVO.setIdProduto(Long.parseLong(jtCodigo.getText()));
        vVO.setNome(jtNome.getText());
        vVO.setTipo(jtTipo.getText());
        vVO.setQuantidade(Integer.parseInt(jtQuantidade.getText()));
        vVO.setValorCompra(Double.parseDouble(jtValorCompra.getText()));
        vVO.setValorVenda(Double.parseDouble(jtValorVenda.getText()));

        if (vVO.getQuantidade() > pVO.getQuantidade()) {
            JOptionPane.showMessageDialog(rootPane, "Saldo insuficiente no estoque!");
        } else {
            pVO.setQuantidade(pVO.getQuantidade() - vVO.getQuantidade());
            
            Connection con = ConexaoBanco.getConexao();
            Statement stat = con.createStatement();
            try {
                String sql = "update produtos set quantidade = " + (pVO.getQuantidade() - vVO.getQuantidade())
                        + " where idProduto = " + pVO.getIdProduto();
                stat.execute(sql);
            } catch (Exception e) {
                throw new Exception ("Erro ao subtrair do estoque" + e.getMessage());
                
            } finally {
                stat.close();
                con.close();
            }
        }

        ProdutoServico ps = servicos.ServicosFactory.getProdutoServico();

        ps.registrarVendas(vVO);

        JOptionPane.showMessageDialog(rootPane, "Venda registrada com sucesso!");

    } catch (Exception e) {
        JOptionPane.showMessageDialog(rootPane, "1" + e.getMessage());
    }
}

Você já faz uma subtração das quantidades nesta parde do código, porque você faz a subtração novamente dentro da query SQL ?

Qual o problema que está ocorrendo realmente ?

1 curtida

Eu não entendo esse “novo em programação” que já sai fazendo sistemas integrados com bancos de dados. Quando eu era novo, estudava algoritmos, if/else, etc.

Ao invés de coisas assim, prefira

VendaVO vendaVO = new VendaVO();

Aliás, até as letras VO são desnecessárias neste caso…

Isso não é feito aqui

Como o @Jonathan_Medeiros disse, por que, mais uma vez, subtrair esse valor?

1 curtida

Olá @Jonathan_Medeiros, cara eu a segunda parte que eu subtrai ali eu tava subtraindo do banco de dados, e a primeira parte eu esqueci de tirar, tentei primeiro com pVO.setQuantidade(pVO.getQuantidade() - vVO.getQuantidade());
ai depois tentei subtrair no banco de dados e esqueci de tirar essa linha.
O que acontece é que na tabela de produtos a quantidade total não subtrai pela quantidade da venda, ela simplesmente adiciona a venda tudo certo mas não subtrai do estoque.

Tu tem ciência de que os valores que estão ali na sua query SQL são os que estão nos models e não os que estão na base dados né !?
Eles podem ser diferentes, ou até estarem com o valor zerado, já fez um debug passo a passo no seu código para verificar esta possibilidade ?

O correto a se fazer seria:
1º - Buscar na base de dados o saldo em estoque para o produto em questão
2º - Validar saldo negativo caso se faça necessário
3º - Subtrair a quantidade vendida do produto do saldo em estoque
4º - Atualizar o saldo do estoque com o valor obtido no passo 3

Vou fazer isso e ver se resolve, obrigado @Jonathan_Medeiros