Sistema de caixa, problema com o cancelar produto

Ola pessoal tudo bem?

Estou desenvolvendo um sistema de caixa aqui e estou com problemas com o comando de canelar produto da copra;

Bem primeiramente tentarei explicar para vcs como funciona o sistema;
-usando MySQL;
-Primeiramente o usuario digita o cod. de barras do produto em uma jTextField, ao clicar no btn ‘OK’ o sistema procura no BD dentro da table estoque o produto com o cod. barras equivalente ao buscado;
-Ao encontrar o cod. barras, ele retorna e seta o nome e preço daquele em duas labels distintas;
-Pego o conteudo das duas labels e insiro em uma table chamada ‘nota_fiscal’, apos cadastrado os produtos nesta table, busco e jogo tudo que a ha na table ‘nota_fiscal’ em uma jTable, chamada jTable_nota_fiscal(que funcionara como uma especie de nota fiscal da compra);
-Somo tudo que tem no campo preço da table ‘nota_fiscal’, com o comando “SELECT SUM(preco) AS preco FROM nota_fiscal”, e seto uma label que exibe o total da compra;

Agora estou com o problema para o evento ‘cancelar compra’, a intenção é que o usuario clique no produto que deseja cancelar dentro da jTable_nota_fiscal e clique no btn cancelar produto;
Ele teria que voltar o produto para o estoque e deletar da table nota_fiscal e ai re-somar o total da compra;

Creio que o erro estaja nas linhas em que pego o que foi selecionado na jTable e busca conforme o codigo de barras;

Estou tentando com os seguintes codigos


//metodo para exluir produto da table nota_fiscal

    private void Excluir_Produto()
    {
        
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con =DriverManager.getConnection("jdbc:mysql://localhost/mercado","root","root");
            
            
            int row = jTable_Nota_Fiscal.getSelectedRow();
            String cod_selecionado = (jTable_Nota_Fiscal.getModel().getValueAt(row,3).toString());//linha na qual creio que esteja o erro

//na jTable a ordem das colunas é: Preço, nome do produto, cod. barras
            
            String query = "delete from nota_fiscal where cod_barras ="+cod_selecionado+"'";
            
            PreparedStatement cmd = con.prepareStatement(query);

            
            
            cmd.executeUpdate();
            
            JOptionPane.showMessageDialog(null, "Excluido", "Excluido", JOptionPane.QUESTION_MESSAGE);
            
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "DRIVER NAO ENCONTRADO");
        }catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "ERRO DE SQL");
        }
        
    }

[code]

//Metodo para voltar o produto ao estoque

private void voltar_estoque1()
{
        
    try
    {
    
    int row = jTable_Nota_Fiscal.getSelectedRow();
    String table_click = (jTable_Nota_Fiscal.getModel().getValueAt(row,3).toString());
        
        
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn;
        conn =  DriverManager.getConnection("jdbc:mysql://localhost/mercado","root","root");
        
        String query1 = "UPDATE estoque set qtde = qtde+1 WHERE cod_barras='"+table_click+"'";
        
        
        PreparedStatement cmd ;
        cmd = conn.prepareStatement(query1);
        
        
        
        
        cmd.executeUpdate();
    }
    
    
    catch (ClassNotFoundException ex)
    {
        JOptionPane.showMessageDialog(null, "DRIVER NAO ENCONTRADO");
    }
    catch (SQLException e)
    {
        JOptionPane.showMessageDialog(null, "ERRO DE SQL");
    }
    
    
}
[/code]

Antes que me perguntem, estou colocando primeiramente o evento pra voltar o produto ao estoque, ai o que exlui da table ‘nota_fiscal’, ai consulto novamente a table ‘nota_fical’ e seto dentro da jTable, ai sim somo novamente;

Tentei colocar tudo o que creio ser necessario para vcs me ajudarem, desculpem por qualquer erro, se precisarem de mais alguma coisa…

Grato desde ja Fabio Silva, SouJava

Ah, que medo deste código.
1 - Nunca, jamais, em tempo algum, faça isso

 String query = "delete from nota_fiscal where cod_barras ="+cod_selecionado+"'"; 

Está usando PreparedStatement, faça assim:

 String query = "delete from nota_fiscal where cod_barras = ?"; 
PreparedStatement cmd = con.prepareStatement(query);  
  cmd.set_O_Tipo_De_Dado_Que_Representa_A_Variavel_cod_selecionado(1, cod_selecionado);
            cmd.executeUpdate();  

O que você está fazendo é misturar tudo na classe que renderiza a tela? Se é isso, comece já a desfazer isso, antes que fique pior.

com certeza isso da muito medo.

Cara, antes de tudo seria legal você ter em seu projeto uma separação de camadas.

sua view ta muito acoplada com sua regra de banco.

da uma estudada sobre DAO sobre MVC

uma outra coisa por que ao invés de toda vez que vc busca o codigo do produto e salvar na tabela nota fiscal vc não busca o produto e adiciona em uma lista e só no final salva a nota, fazendo assim vc não precisar retirar o produto fazendo um delete no banco, vc apenas retira o produto da lista de produtos da nota fiscal