Atualizar tabela

Gostaria de alterar um campo do banco de dados através de uma jtable.

Eu tenho uma TableModel, Dao.

Codigo Classe Dao Metodo Atualizar:


 public void atualizar(Produto despesa) {
      conectar();
      String com = "UPDATE Produto SET " +
                   "despesa= '" + despesa.getDespesa() + "'," +
   	   	   "estabelecimento= '" + despesa.getEstabelecimento() + "'," +
   	   	   "datadadespesa='" + despesa.getDatadaDespesa() + "'," +
   	   	   "valordadespesa='" + despesa.getValordaDespesa() + "'," +
   	   	   "formadepagamento='" + despesa.getFormadePagamento() + "'," +
                   "datacheque='" + despesa.getDataCheque() + "' " +
                   "numerocheque='" + despesa.getNumeroCheque() + "' " +
                   "mes='" + despesa.getMes() + "' " +
   	   	   " WHERE despesa = '" + despesa.getDespesa() + "'";
      try {
         comando.executeUpdate(com); 
         JOptionPane.showMessageDialog(null,"Operação realizada com sucesso!");
      } catch (SQLException e){
         e.printStackTrace();
      } finally {
         fechar();
      }
   }

Segue cpodigo que fiz para atualizar meu banco de dados:

private void btAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                            
  
      if(evt.getSource()==btAlterar){  
  
               int row = tblBanco.getSelectedRow();  
               if (row != -1) {  
        despesa.setDespesa(tblBanco.getColumnName(0));  
        despesa.setEstabelecimento(tblBanco.getColumnName(1));  
        despesa.setDatadaDespesa(tblBanco.getColumnName(2));  
        despesa.setValordaDespesa(tblBanco.getColumnName(3));  
        despesa.setDataCheque(tblBanco.getColumnName(4));  
        despesa.setNumeroCheque(tblBanco.getColumnName(5));  
        despesa.setFormadePagamento(tblBanco.getColumnName(6));  
        daoProduto.atualizar(despesa);  
  
               } else {  
                   // mostrar advertência?  
               }  
  
             PreencherTabela();  
       }  
           
   }                                           

Mas deu erro:


ava.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe (operador faltando) na express?o de consulta ''Forma de Pagamento' numerocheque='Data do Cheque' mes='null''.  
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)  
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)  
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)  
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)  
        at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288)  
        at dao.DaoProduto.atualizar(DaoProduto.java:73)  
        at Tela_Principal.btAlterarActionPerformed(Tela_Principal.java:483)  
        at Tela_Principal.access$1100(Tela_Principal.java:7)  
        at Tela_Principal$13.actionPerformed(Tela_Principal.java:191)  
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)  
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)  
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)  
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)  
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)  
        at java.awt.Component.processMouseEvent(Component.java:6267)  
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)  
        at java.awt.Component.processEvent(Component.java:6032)  
        at java.awt.Container.processEvent(Container.java:2041)  
        at java.awt.Component.dispatchEventImpl(Component.java:4630)  
        at java.awt.Container.dispatchEventImpl(Container.java:2099)  
        at java.awt.Component.dispatchEvent(Component.java:4460)  
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)  
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)  
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)  
        at java.awt.Container.dispatchEventImpl(Container.java:2085)  
        at java.awt.Window.dispatchEventImpl(Window.java:2478)  
        at java.awt.Component.dispatchEvent(Component.java:4460)  
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)  
Conexão Fechada  
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)  
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)  
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)  
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)  
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)  
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)  
Conectado!  

[quote=alucardmaas]
-[/quote]

Pelo visto vc ta mais perdido q cego em tiroteio hein…
Ja respondi como fazer nesse post: http://www.guj.com.br/java/265824-pessoal-duvida-jtable

Novamente vou dizer: Nao concatene Strings de SQL, use PreparedStatement.
Tendo o seu TableModel como eu e o Vini explicamos no post anterior q vc fez, basta pegar o objeto e envia-lo para o Update/Delete e fazer o q precisa
Pq vc ta usando no ActionEvent um evt.getSource() ??? É um botao para fazer tudo ? Nao faz sentido isso, achei estranho.

Mas é isso, como vc esta mais perdido q azeitona na boca de banguelo é melhor dar mais uma estudada do que tentar sair fazendo as coisas sem nem ter base nenhuma pois isso é mais simples q tirar doce da boca de crianca.

Recomendo ler a Apostila FJ11,FJ21 e siga os links

http://www.javasimples.com.br/swing-awt/death-to-defaulttablemodel-abstracttablemodel-rulez
http://www.guj.com.br/articles/147

t+ e boa sorte.

Fernando, mas vc não pode me passar uma base baseado no meu codigo

em relação a classe Dao vou alterar, mas para isto queria ter uma base de como poder atualizar, o Vini postou como mostrar o banco na tabela que foi este codigo:

    List<Produto> lista = daoProduto.buscarTodos();
                ProdutoTableModel tabela = new ProdutoTableModel(lista);
                tblBanco.setModel(tabela);

Você poderia dar uma força para atualizar

já consegui exluir só falata isto é que como sou iniciante pelo menos uma base, ou um exmplo pratico.

Fico agradecido

[quote=alucardmaas]em relação a classe Dao vou alterar, mas para isto queria ter uma base de como poder atualizar, o Vini postou como mostrar o banco na tabela que foi este codigo:

    List<Produto> lista = daoProduto.buscarTodos();
                ProdutoTableModel tabela = new ProdutoTableModel(lista);
                tblBanco.setModel(tabela);

Você poderia dar uma força para atualizar

já consegui exluir só falata isto é que como sou iniciante pelo menos uma base, ou um exmplo pratico.

Fico agradecido[/quote]

Veja o projeto q estou te mandando, basta vc adicionar no ODBC a fonte de dados Produtos e apontar para o arquivo produtos.mdb dentro da pasta db na raiz do projeto, depois adicione o projeto a sua IDE, eu uso NetBeans entaum fiz tudo usando NetBeans. Se quiser usar Eclipse basta vc colocar no workspace e criar um projeto com o msm nome ou ate msm importar. No Eclipse vc pode instalar o WindowBuilder.

O metodo de insert vc implementa, se quiser.

t+ e boa sorte.

Bacana adicionei no meu projeto so o codigo:

public void updateRow(Produtos p, int row){
        listaProdutos.set(row, p);
        fireTableDataChanged();
    }

ficou assim:

package tabela;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import javax.swing.table.AbstractTableModel;
import model.Produto;

public class ProdutoTableModel extends AbstractTableModel {

    //constantes que vão representar as colunas
    //(só para facilitar o entendimento do código)
    private final int COL_Despesa = 0;
    private final int COL_Estabelecimento = 1;
    private final int COL_DataDespesa = 2;
    private final int COL_ValorDespesa = 3;
    private final int COL_FormaPagamento = 4;
    private final int COL_DataCheque = 5;
    private final int COL_NumeroCheque = 6;

    //lista dos produtos que serão exibidos
   private java.util.List<model.Produto> produtos; 

    public ProdutoTableModel() {
        produtos = new ArrayList();
    }

   public ProdutoTableModel(java.util.List<model.Produto> lista) {
        this();
        produtos.addAll(lista);
    }

    public int getRowCount() {
        //cada produto na lista será uma linha
        return produtos.size();
    }

    public int getColumnCount() {
        //vamos exibir só Nome e Quantidade, então são 7 colunas
        return 7;
    }

    @Override
    public String getColumnName(int column) {
        //qual o nome da coluna
        if (column == COL_Despesa) {
            return "Despesa";
        } else if (column == COL_Estabelecimento) {
            return "Estabelecimento";
        }
          else if (column == COL_DataDespesa) {
            return "Data da Despesa";
        }
          else if (column == COL_ValorDespesa) {
            return "Valor da Despesa";
        }
          else if (column == COL_FormaPagamento) {
            return "Forma de Pagamento";
        }
          else if (column == COL_DataCheque) {
            return "Data do Cheque";
        }
          else if (column == COL_NumeroCheque) {
            return "Numero do Cheque";
        }
        return "";
    }

    @Override
    public Class getColumnClass(int columnIndex) {
        //retorna a classe que representa a coluna
        if (columnIndex == COL_Despesa) {
            return String.class;
        } else if (columnIndex == COL_Estabelecimento) {
            return String.class;
        }
          else if (columnIndex == COL_DataDespesa) {
            return String.class;
        }
          else if (columnIndex == COL_ValorDespesa) {
            return String.class;
        }
          else if (columnIndex == COL_FormaPagamento) {
            return String.class;
        }
          else if (columnIndex == COL_DataCheque) {
            return String.class;
        }
          else if (columnIndex == COL_NumeroCheque) {
            return String.class;
        }
        return String.class;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        //pega o produto da linha
        Produto p = produtos.get(rowIndex);//esta dando erro aqui

        //verifica qual valor deve ser retornado
        if (columnIndex == COL_Despesa) {
            return p.getDespesa();
        } else if (columnIndex == COL_Estabelecimento) {
            return p.getEstabelecimento();
        }
          else if (columnIndex == COL_DataDespesa) {
            return p.getDatadaDespesa();
        }
          else if (columnIndex == COL_ValorDespesa) {
            return p.getValordaDespesa();
        }
          else if (columnIndex == COL_FormaPagamento) {
            return p.getFormadePagamento();
        }
          else if (columnIndex == COL_DataCheque) {
            return p.getDataCheque();
        }
          else if (columnIndex == COL_NumeroCheque) {
            return p.getNumeroCheque();
        }
        return "";
    }
        @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        //no nosso caso todas vão ser editáveis, entao retorna true pra todas
        return true;
    }

   @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        //pega o produto da linha
        Produto p = produtos.get(rowIndex);//esta dando erro aqui

        //verifica qual valor vai ser alterado
        if (columnIndex == COL_Despesa) {
            p.setDespesa(aValue.toString());
        } else if (columnIndex == COL_Estabelecimento) {
            p.setEstabelecimento(aValue.toString());
        }
          else if (columnIndex == COL_DataDespesa) {
            p.setDatadaDespesa(aValue.toString());
        }
          else if (columnIndex == COL_ValorDespesa) {
            p.setValordaDespesa(aValue.toString());
        }
          else if (columnIndex == COL_FormaPagamento) {
            p.setFormadePagamento(aValue.toString());
        }
          else if (columnIndex == COL_DataCheque) {
            p.setDataCheque(aValue.toString());
        }
          else if (columnIndex == COL_NumeroCheque) {
            p.setNumeroCheque(aValue.toString());
        }
        //avisa que os dados mudaram
        fireTableDataChanged();
    }

    //-----------------------------------------------------
    //Métodos personalizados
    //-----------------------------------------------------
    public void inserir(Produto p) {
        produtos.add(p);

        fireTableDataChanged();
    }

    public void excluir(String pos) {
        produtos.remove(pos);

        fireTableDataChanged();
    }
    public void updateRow(Produto p, int row){  // o codigo que vc passou esta aqui     <..................................................
        produtos.set(row, p);
        fireTableDataChanged();
    }

    public void excluir(Produto p) {
        produtos.remove(p);

        fireTableDataChanged();
    }

    public void ordenarPorValor() {
        //ordena pelo nome
        Collections.sort(produtos, new Comparator<Produto>() {//esta dando erro aqui no sort

            public int compare(Produto o1, Produto o2) {
                return o1.getValordaDespesa().compareTo(o2.getValordaDespesa());
            }
        });
        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }
    

    public void misturar() {
        //mistura a lista
        Collections.shuffle(produtos);

        //avisa que a tabela foi alterada
        fireTableDataChanged();
    }

    public Produto getCliente(int pos) {
        if (pos >= produtos.size()) {
            return null;
        }

        return produtos.get(pos);//esta dando erro  aqui
    }
}

agora como eu chamo isto no codigo principal Leonardo

E obrigado pela força

Poxa Leonardo ve se estou no caminho certo

 if(tblBanco.getSelectedRow() >= 0){
        
            int row = tblBanco.getSelectedRow();
            Produto p = dtm.getProduto(row);    nesta linha Leonardo esta dando ERRO <.................................................       
            
            //crio novo objeto para alteracao
            Produto pUpdate = new Produto();
            despesa.setDespesa(p.getDespesa());
            despesa.setEstabelecimento(p.getEstabelecimento());
            despesa.setDatadaDespesa(p.getDatadaDespesa());
            despesa.setValordaDespesa(p.getValordaDespesa());
            despesa.setDataCheque(p.getDataCheque());
            despesa.setNumeroCheque(p.getNumeroCheque());
            despesa.setFormadePagamento(p.getFormadePagamento());
             new DaoProduto().atualizar(despesa);
            dtm.updateRow(despesa,row);
        
    }else{
        JOptionPane.showMessageDialog(null, "Selecione a linha q deseja alterar","Alterar",JOptionPane.WARNING_MESSAGE);
    }
          
    }                                         

Esta Dando erro na variavel DTM tenho que adaptar ao meu codigo qual seria

Mudei mas olha o erro que deu:

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code
        at Tela_Principal.btAlterarActionPerformed(Tela_Principal.java:476)
        at Tela_Principal.access$1100(Tela_Principal.java:8)
        at Tela_Principal$13.actionPerformed(Tela_Principal.java:193)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

a linha 476 é está

  private void btAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                          

        if(tblBanco.getSelectedRow() >= 0){
            int row = tblBanco.getSelectedRow();
            Produto p = dtm.getProduto(row); //         linha 476

            despesa.setDespesa(p.getDespesa());
            despesa.setEstabelecimento(p.getEstabelecimento());
            despesa.setDatadaDespesa(p.getDatadaDespesa());
            despesa.setValordaDespesa(p.getValordaDespesa());
            despesa.setDataCheque(p.getDataCheque());
            despesa.setNumeroCheque(p.getNumeroCheque());
            despesa.setFormadePagamento(p.getFormadePagamento());
            dtm.updateRow(despesa,row);
            daoProduto.atualizar(despesa);

    }else{
        JOptionPane.showMessageDialog(null, "Selecione a linha q deseja alterar","Alterar",JOptionPane.WARNING_MESSAGE);
    }
          
    }                                         

[quote=alucardmaas]a linha 476 é está

[code]
private void btAlterarActionPerformed(java.awt.event.ActionEvent evt) {

    if(tblBanco.getSelectedRow() >= 0){
        int row = tblBanco.getSelectedRow();
        Produto p = dtm.getProduto(row); //         linha 476

        despesa.setDespesa(p.getDespesa());
        despesa.setEstabelecimento(p.getEstabelecimento());
        despesa.setDatadaDespesa(p.getDatadaDespesa());
        despesa.setValordaDespesa(p.getValordaDespesa());
        despesa.setDataCheque(p.getDataCheque());
        despesa.setNumeroCheque(p.getNumeroCheque());
        despesa.setFormadePagamento(p.getFormadePagamento());
        dtm.updateRow(despesa,row);
        daoProduto.atualizar(despesa);

}else{
    JOptionPane.showMessageDialog(null, "Selecione a linha q deseja alterar","Alterar",JOptionPane.WARNING_MESSAGE);
}
      
}                                         

[/code][/quote]

Mano, na boa, se tu não abrir e olhar como eu fiz o projeto de exemplo q mandei não vai entender como se faz. Estou aqui pra ajudar, mas você tem q se ajudar também. Sem um pouco de estudos, não vai conseguir.

E quem é Leonardo ?

t+ e boa sorte.

Sorry Fernando eu olhei como vc fez a unica diferença do seu projeto para o meu é a classe DAO

A sua classe Dao está mellhor vou adptar meu codigo nela

Fernando reescrevi tudo dinovo o codigo baseado no seu:

Esta dando este Erro:


Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code
        at Tela_Principal.btAlterarActionPerformed(Tela_Principal.java:468)
        at Tela_Principal.access$1100(Tela_Principal.java:8)
        at Tela_Principal$13.actionPerformed(Tela_Principal.java:188)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

o erro está nesta linha:


 private void btAlterarActionPerformed(java.awt.event.ActionEvent evt) {                                          

        if(tblBanco.getSelectedRow() >= 0){
        String descricao = JOptionPane.showInputDialog(null, "Nova Descricao", "Descricao", JOptionPane.INFORMATION_MESSAGE);
        if(descricao != null && !descricao.trim().isEmpty()){
            int row = tblBanco.getSelectedRow();
            Produto p = dtm.getProduto(row); // Aqui está o erro Fernando

            //crio novo objeto para alteracao
            Produto pUpdate = new Produto();
            despesa.setDespesa(p.getDespesa());
            despesa.setEstabelecimento(p.getEstabelecimento());
            despesa.setDatadaDespesa(p.getDatadaDespesa());
            despesa.setValordaDespesa(p.getValordaDespesa());
            despesa.setDataCheque(p.getDataCheque());
            despesa.setNumeroCheque(p.getNumeroCheque());
            despesa.setFormadePagamento(p.getFormadePagamento());
            dtm.updateRow(pUpdate,row);
        }
    }else{
        JOptionPane.showMessageDialog(null, "Selecione a linha q deseja alterar","Alterar",JOptionPane.WARNING_MESSAGE);
    }
               
    }                                     

Minha Classe DAO:

package ProdutosDAO;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import model.Produto;
import dao.banco.ConFactory;

public class ProdutosDAO {

      private Connection con;

    public ProdutosDAO(){
        try {
            this.con = ConFactory.getConnection();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getLocalizedMessage(), "Connection Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    public List<Produto> getProdutos(){

        List<Produto> lista = new ArrayList<Produto>();

        try {
           PreparedStatement stm = this.con.prepareStatement("SELECT * FROM produto");
           ResultSet rs = stm.executeQuery();
           while(rs.next()){
               Produto p = new Produto();
               p.setDespesa(rs.getString("despesa"));
               p.setEstabelecimento(rs.getString("estabelecimento"));
               p.setDatadaDespesa(rs.getString("datadadespesa"));
               p.setValordaDespesa(rs.getString("valordadespesa"));
               p.setFormadePagamento(rs.getString("formadepagamento"));
               p.setDataCheque(rs.getString("datacheque"));
               p.setNumeroCheque(rs.getString("numerocheque"));
               lista.add(p);
           }
           rs.close();
           stm.close();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getLocalizedMessage(), "Select Error", JOptionPane.ERROR_MESSAGE);
        }
        return lista;
    }

    public void update(Produto p){
        
        // Faz Update(Alteracao) dos produtos
         
        try {
            PreparedStatement stm = this.con.prepareStatement("UPDATE produto SET despesa = ?, estabelecimento = ?, datadadespesa = ?, valordadespesa = ?, formadepagamento = ?, datacheque = ? , numerocheque = ? "
                                                                                + "WHERE despesa = ?");
            stm.setString(1, p.getDespesa());
            stm.setString(2, p.getEstabelecimento());
            stm.setString(3, p.getDatadaDespesa());
            stm.setString(4, p.getValordaDespesa());
            stm.setString(5, p.getFormadePagamento());
            stm.setString(6, p.getDataCheque());
            stm.setString(7, p.getNumeroCheque());
            stm.executeUpdate();
            stm.close();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getLocalizedMessage(), "Update Error", JOptionPane.ERROR_MESSAGE);
        }
    }


    public void delete(Produto p){
        try {
            PreparedStatement stm = this.con.prepareStatement("DELETE FROM produto WHERE despesa = ?");
            stm.setString(1, p.getDespesa());
            stm.executeUpdate();
            stm.close();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getLocalizedMessage(), "Delete Error", JOptionPane.ERROR_MESSAGE);
        }

    };

    public void insert(Produto p){
    
    
    };





}

Minha Classe TableModel:


package tabela;


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import model.Produto;

/**
 *
 * @author fernegao
 */
public class ProdutoTableModel extends AbstractTableModel{
    private List<Produto> listaProdutos;
    private String[] colunas = {"Despesa","Estabelecimento","Data da Despesa","Valor da Despesa","Forma de Pagamento","Data do Cheque","Numero do Cheque"};

    public ProdutoTableModel(){
        listaProdutos = new ArrayList<Produto>();
    }

    public ProdutoTableModel(List<Produto> lista){
        this();
        listaProdutos.addAll(lista);
    }

    @Override
    public int getRowCount() {
        return listaProdutos.size();
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }

    @Override
     public String getColumnName(int column){
        if(colunas[column] == "Despesa"){
            return "Despesa";
        }else if(colunas[column] == "Estabelecimento"){
            return "Estabelecimento";
        }else if(colunas[column] == "Data da Despesa"){
            return "Data da Despesa";
        }else if(colunas[column] == "Valor da Despesa"){
            return "Valor da Despesa";
        }else if(colunas[column] == "Forma de Pagamento"){
            return "Forma de Pagamento";
        }else if(colunas[column] == "Data do Cheque"){
            return "Data do Cheque";
        }else if(colunas[column] == "Numero do Cheque"){
            return "Numero do Cheque";
        }
        return new String();
    }

    @Override
     public Class getColumnClass(int column){
         //private String[] colunas = {" ","Data","Hora","Aviso","Terminal","Usuário"};
         if(colunas[column] == "Despesa"){
             return String.class;
         }
         else if(colunas[column] == "Forma de Pagamento"){
            return String.class;
         }else if(colunas[column] == "Data da Despesa"){
             return String.class;         }
         else if(colunas[column] == "Valor da Despesa"){
             return String.class;         }
         else if(colunas[column] == "Forma de Pagamento"){
             return String.class;         }
         else if(colunas[column] == "Data do Cheque"){
             return String.class;
         }
         else if(colunas[column] == "Numero do Cheque"){
             return String.class;
         }
        return String.class;
    }


    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Produto p = listaProdutos.get(rowIndex);
        switch(columnIndex){
            case 0: return p.getDespesa();
            case 1: return p.getEstabelecimento();
            case 2: return p.getDatadaDespesa();
            case 3: return p.getValordaDespesa();
            case 4: return p.getFormadePagamento();
            case 5: return p.getDataCheque();
            case 6: return p.getNumeroCheque();

            default: return new String();
        }
    }

    public boolean isCellEditable(int row, int col){
        return false;
    }

    public void updateRow(Produto p, int row){
        listaProdutos.set(row, p);
        fireTableDataChanged();
    }

    public void removeRow(int row){
        listaProdutos.remove(row);
        fireTableDataChanged();
    }

    public Produto getProduto(int row){
        return listaProdutos.get(row);
    }

}

Por favor aonde está o erro.

a tabela esta atualizando normal, so falta alterar e excluir

Fernando não estou conseguindo achar o erro, acho que está no TableModel, mas eu não acho

Da uma olhada no meu arquivo por favor ou nas classe que postei para vc

Estou conseguindo Fernando ja esta excluindo agora so falta alterar, acho que o erro está na classe dao, vou postar o print do erro
Não Está dando erro nehum

Me ajudem

Codigo DAO:

 public void update(Produtos p){

        // Faz Update(Alteracao) dos produtos

        try {
            PreparedStatement stm = this.con.prepareStatement("UPDATE produto SET despesa = ?, estabelecimento = ?, data da despesa = ?, valor da despesa = ?, forma de pagamento = ?, data cheque = ? , numero cheque = ? "
                                                                                + "WHERE despesa = ?");
            stm.setString(1, p.getDespesa());
            stm.setString(2, p.getEstabelecimento());
            stm.setString(3, p.getDatadaDespesa());
            stm.setString(4, p.getValordaDespesa());
            stm.setString(5, p.getFormadePagamento());
            stm.setString(6, p.getDataCheque());
            stm.setString(7, p.getNumeroCheque());
            stm.executeUpdate();
            stm.close();
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex.getLocalizedMessage(), "Update Error", JOptionPane.ERROR_MESSAGE);
        }
    }