Problemas com actualização do stock

Pessoal é o seguinte, estou a fazer actualização da quantidade dos produtos em stock em um sistema de venda, so que acontece a seguinte situação: se por acaso eu testar apenas a venda de um produto ele diminui a quantidade normalmente, agora se eu vender dois os mais produtos ele ele pega na quantidade do primeiro, segundo…n produtos soma tudo e subtrai na ultimo produto cadastrado no stock.

Exemplo:

Tabela stock

codigo_produto codigo_fornecedor quantidade preço data
1 2 4 ------ ------
2 4 19 ------ ------

Tendo em conta essa tabela se eu vender dois produtos (os produtos com codigo 1 e 2) e digamos que a cada produto vendido eu coloque como quantidade 2 ele irá somar 2 + 2 = 4 e vai pegar nesse 4 e subtrair por 19. O correcto seria ele ir no produto com codigo 1 e fazer 4-2 e no produto com codigo 2 fazer 19-2.

Eis o codigo:
StockDao.java

    private final String ACTUALIZAR_QUANTIDADE = "UPDATE stock SET quantidade = quantidade - ? WHERE codigo_produto = ? and codigo_fornecedor = ?";
    public void actualizarQuantidade(Stock s) {
        try {
            conexao = Conexao.ligarBd();
            ps = conexao.prepareStatement(ACTUALIZAR_QUANTIDADE);
            ps.setInt(1, s.getQuantidade());
            ps.setInt(2, s.getCodigoProduto());
            ps.setInt(3, s.getCodigoFornecedor());
            ps.executeUpdate();
            ps.close();
            conexao.close();
            
        } catch (SQLException exception) {
            JOptionPane.showMessageDialog(null, "Impossivel actualizar quantidade do stock " + exception, "Stock", JOptionPane.ERROR_MESSAGE);
        }
    }

Gui

    public void actualizarQuantidadeStock() {
        Stock s = new Stock();
        StockDao sd = new StockDao();
        ls = new ArrayList<Stock>();
        s.setQuantidade(Integer.parseInt(txtQuantidadeVendida.getText()));
        s.setCodigoProduto(lsp.get(cboNomeProduto.getSelectedIndex()).getCodigoProduto());
        s.setCodigoFornecedor(lsf.get(cboNomeFornecedor.getSelectedIndex()).getCodigoFornecedor());
        ls.add(s);
        for (int i = 0; i < ls.size(); i++) {
            sd.actualizarQuantidade(ls.get(i));
        }
        //JOptionPane.showMessageDialog(null, lsp.get(cboNomeProduto.getSelectedIndex()).getCodigoProduto(), "Stock", JOptionPane.ERROR_MESSAGE);
        //JOptionPane.showMessageDialog(null, lsf.get(cboNomeFornecedor.getSelectedIndex()).getCodigoFornecedor(), "Stock", JOptionPane.ERROR_MESSAGE);
        JOptionPane.showMessageDialog(null, "Quantidade actualizada com sucesso", "Stock", JOptionPane.ERROR_MESSAGE);
    }
    public void inserir() {
        if (ldv.size() == 0) {
            JOptionPane.showMessageDialog(null, "Erro: Informe pelo menos uma venda a ser efectuada", "Venda", JOptionPane.ERROR_MESSAGE);
        } else {
            DetalhesVendaDao dvd = new DetalhesVendaDao();
            DetalhesVenda dv = new DetalhesVenda();
            for (int i = 0; i < ldv.size(); i++) {
                dvd.inserir(ldv.get(i));
                actualizarQuantidadeStock();
            }
            JOptionPane.showMessageDialog(null, "Nova venda efectuada com sucesso", "Venda", JOptionPane.INFORMATION_MESSAGE);
        }
    }

Problema resolvido…