Dúvidas sobre como atualizar dados do JTable

6 respostas
S

Boa noite galera,
Criei minha Jtable e já estou conseguindo exibir meus dados vindos do banco nela, porem, eu gostaria de conseguir editar os dados dela da seguinte forma: Na hora que eu quisesse editar uma determinada linha, eu iria dar 2 cliques naquela linha e os dados dela seriam exibidos nos respectivos textfields, aí, ao atualizar tais campos, eu apenas iria clicar no botão Editar para que a informação fosse atualizada no meu Jtable.
No momento, eu tenho conseguindo inserir essas informações na JTable, porem ao tentar edita-las, na verdade ele tem adicionado um novo registro e eu não tenho entendido o porque, sei que devo estar me esquecendo de algum detalhe, por isso gostaria da ajuda dos amigos. Segue abaixo meu código. Lembrando que estou trabalhando com uma TableModel.

//Camada view
//Ação Botão salvar

 if (tfnome.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "O campo 'Nome' deverá ser preenchido obrigatoriamente!");
        } else {
            Professores professor = new Professores();
              professor.setNome(tfnome.getText());
               try {
                 CadastrarProfessorDAO pro = new CadastrarProfessorDAO();
                 pro.salvar(professor);
                 model = new TableModel_Professores(new CadastrarProfessorDAO().RetornaTabela());  
                 tabelaProfessores.setModel(model);
               } catch (SQLException ex) {
                   JOptionPane.showMessageDialog(null, "Erro:\n" + ex);
                 } finally {
                   tfnome.setText("");
                   }

//Evento ao se dar 2 cliques em minha Jtable para escolher uma determinada linha para alteração dos dados
      if (evt.getClickCount() > 1) {
            row = tabelaProfessores.rowAtPoint(evt.getPoint());
            if (row >= 0) {
                tfcodigo.setText(tabelaProfessores.getValueAt(row, 0).toString());
                tfnome.setText(tabelaProfessores.getValueAt(row, 1).toString());
            }

//ação botão editar
if (tfnome.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "O campo 'Nome' deverá ser preenchido obrigatoriamente!");
        } else {
            Professores professor = new Professores();
              professor.setNome(tfnome.getText());
               try {
                 CadastrarProfessorDAO pro = new CadastrarProfessorDAO();
                 pro.Atualizar(professor);
                 model = new TableModel_Professores(new CadastrarProfessorDAO().RetornaTabela());  
                 tabelaProfessores.setModel(model);
               } catch (SQLException ex) {
                   JOptionPane.showMessageDialog(null, "Erro:\n" + ex);
                 }

Após editar os textfields e clicar no botão Editar, ele exibe a msg de atualização do cadastro porem minha Jtable não sofre nenhuma alteração, gostaria de saber então o que estaria faltando a ser adicionado em meu código, desde já agradeço qualquer ajuda.

6 Respostas

W

Tipo assim voce so esta setando o nome quando eu atualizo algum dado eu tenho que pegar o id do meu registro , nao sei se é isso mais tenta ai vlw.

S

Bom dia,

Vc poderia me dar um exemplo com base no meu codigo de como fazer isso?

S

Minha DAO - Metodo Atualizar

public void Atualizar(Professores professor) {
         String sql = "Update Professores set nome= ? where id= ?";
        
            try (PreparedStatement stmt = connection.prepareStatement(sql)){
                stmt.setString(1,professor.getNome());
//                System.out.println(professor.getNome());
                stmt.execute();
                stmt.close(); //e fecha a conexão ao bd
                JOptionPane.showMessageDialog(null,"Cadastro atualizado com sucesso!");
                connection.close();
            }
             catch(SQLException ex) {
                JOptionPane.showMessageDialog(null,"Não foi possível adicionar os dados no banco\n" + ex);
           }          
    }

Através do meu System.out.println eu to notando que o dado está sendo atualizado, porem continua não atualizando na minha JTable. Qualquer ajuda dos amigos será de grande valor.

R

Voce esta passando professor, e na sua clausula SQL voce passa nome e id como variavel, mas cade voce setando o ID no prepared statement ?

public void Atualizar(Professores professor) {  
         String sql = "Update Professores set nome= ? where id= ?";  
          
            try (PreparedStatement stmt = connection.prepareStatement(sql)){  
                stmt.setString(1,professor.getNome());  
//                System.out.println(professor.getNome());  
                stmt.execute();  
                stmt.close(); //e fecha a conexão ao bd  
                JOptionPane.showMessageDialog(null,"Cadastro atualizado com sucesso!");  
                connection.close();  
            }  
             catch(SQLException ex) {  
                JOptionPane.showMessageDialog(null,"Não foi possível adicionar os dados no banco\n" + ex);  
           }            
    }
W

Agora ja que esta adicionando no banco corretamente é so vc chamar de volta o método que preenche a tabela, tipo uma pesquisa ou um atualizar tabela.
Vc coloca no mesmo método do botão.

try (PreparedStatement stmt = connection.prepareStatement(sql)){    
                stmt.setString(1,professor.getNome());    
//                System.out.println(professor.getNome());    
                stmt.execute();    
                stmt.close(); //e fecha a conexão ao bd    
                JOptionPane.showMessageDialog(null,"Cadastro atualizado com sucesso!"); 
   
                connection.close(); 
                atualizar_tabela();// aki se vc tiver um metodo que atualiza
                pesquisa();// aki vc pode utilizar sua mesma pesquisa , so passar uma string como parâmetro com a pesquisa sql que ja esta sendo executada. 
            }
S

Boa tarde galera,
Desculpem pela demora em responder, queria agradecer pela ajuda ai de wilkem e rof20004, deu certinho aqui galera, brigadão ai e qualquer dúvidas nos estamos de volta!
Um abraço a todos!!!

Criado 1 de março de 2013
Ultima resposta 4 de mar. de 2013
Respostas 6
Participantes 3