Excluir dados da JTable e do Banco de dados

13 respostas
K

Olá pessoal.

Estou com o seguinte problema:

Tenho uma JTable que carrega os dados do MySql. Quando dou um clique na JTable o sistema me pergunta se eu quero excluir
o cliente selecionado. Se eu clicar em sim, este cliente é excluído do banco de dados e da JTable mas, não estou conseguindo
excluir do banco de dados. Excluir do JTable eu até consigo mas não do banco.
Alguém pode me ajudar?

final DefaultTableModel modelo = new DefaultTableModel();
    JTableDados = new JTable(modelo);
    modelo.addColumn("ID");
    modelo.addColumn("Nome");
    modelo.addColumn("CPF");
    modelo.addColumn("Telefone");
    modelo.addColumn("Nascimento");
    modelo.addColumn("Cadastro");
    JTableDados.getColumnModel().getColumn(0).setPreferredWidth(10);
    JTableDados.getColumnModel().getColumn(1).setPreferredWidth(250);
    JTableDados.getColumnModel().getColumn(2).setPreferredWidth(70);
    JTableDados.getColumnModel().getColumn(3).setPreferredWidth(70);
    JTableDados.getColumnModel().getColumn(4).setPreferredWidth(70);
    JTableDados.getColumnModel().getColumn(5).setPreferredWidth(50);
    JTableDados.setFont(new Font("Segoe UI",Font.PLAIN,11));
    JTableDados.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.LOWERED));
    JTableDados.setSelectionBackground(Color.YELLOW);
    JTableDados.setSelectionForeground(Color.BLUE);
    JTableDados.setDefaultRenderer(Object.class, new ColorRenderer()); // Chama a Classe que intercala as cores da JTable
    JTableDados.setFocusable(false); //Evita o foco
    JTableDados.setAutoCreateRowSorter(true);
    JTableDados.setFont(new Font("Lucida Console",Font.PLAIN,11));
    JTableDados.getTableHeader().setResizingAllowed(false);// evita que as colunas sejam redimensionadas        
    JTableDados.getTableHeader().setReorderingAllowed(false);// evita que as colunas sejam reordenadas        
    JTableDados.setShowGrid(false);// oculta a grade da tabela  
    JTableDados.setShowHorizontalLines(false);// oculta as linhas horizontais da tabela
    JTableDados.setShowVerticalLines(false);// oculta as linhas verticais da tabela
    JScrollPane1.setViewportView(JTableDados); 
    JPanel2 = new JPanel();	
    JPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createTitledBorder(null, "", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 0, 11)), "Clientes Cadastrados", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 0, 11)));
    JPanel2.setFont(new Font("Segoe UI",Font.PLAIN,11)); 
    JPanel2.setOpaque(false);	       
    JPanel2.setBounds(140, 370, 840, 340);
    JLabelFundo.add(JPanel2);
    try
{
String url = "jdbc:mysql://localhost:3306/javalocadora";
String usuario = "root";
String senha = "210683";
Class.forName("com.mysql.jdbc.Driver");
Connection con;
con = DriverManager.getConnection(url,usuario,senha);
Statement st = con.createStatement();
//Executa o comando SQL que retorna todos os campos da tabela desejada
    ResultSet RS = st.executeQuery("SELECT * FROM Clientes WHERE ID");
    while(RS.next()){
    int ID = RS.getInt("ID");        
    String Nome = RS.getString("Nome");
    //endereço = RS.getString("Endereco");
    String cpf = RS.getString("CPF");
    String telefone = RS.getString("Telefone");
    String nascimento = RS.getString("DataNasc");
    String cadastro = RS.getString("DataCadastro");
    modelo.addRow(new Object[]{new Integer(ID), new String(Nome),new String(cpf),new String(telefone),new String(nascimento),new String(cadastro)}); 
    }       
    con.close(); 
    RS.close();         
    }catch(SQLException e){ //trata os erros
    //JOptionPane.showMessageDialog(this,"Erro Cmdo SQL "+e.getMessage());
    }
    catch(Exception event) {        	
    }


    //Exclui dados da JTable e do banco de dados

    JTableDados.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent evt) {
     
    int status = JOptionPane.showConfirmDialog(null,"Deseja excluir este cliente?","Atenção",JOptionPane.YES_NO_OPTION);
    if (status == JOptionPane.YES_OPTION) {
    try
{
String url = "jdbc:mysql://localhost:3306/javalocadora";
String usuario = "root";
String senha = "210683";
Class.forName("com.mysql.jdbc.Driver");
Connection con;
con = DriverManager.getConnection(url,usuario,senha);
Statement st = con.createStatement();		
st.executeUpdate("DELETE * FROM Clientes WHERE ID ="+JTableDados.getSelectedRow());		
int[] l = JTableDados.getSelectedRows();   
    javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel)JTableDados.getModel();	
    for(int i = 0; i < l.length; i++)   
    dtm.removeRow(l[i] - i);
    con.close();		
    }
    catch(Exception event) {
    JOptionPane.showMessageDialog(null,"Não foi possível estabelecer conexão com o banco de dados!","Erro",JOptionPane.ERROR_MESSAGE);
    }
    }        	   
    }});

13 Respostas

R

Vc está esquecendo de dar um commit antes de fechar a conexão.
Eu só não lembro se esse é um metodo da classe Statement ou se é da classe Conection.

K

rogeriuslima

Como eu faria esse Commit?

R

É fácil, antes de fechar a conexão vc usa o metodo commit() da classe Connection (eu já confirmei).
Se acontecer alguma falha vc usa o metodo rollback().
No caso do seu código ficaria assim:

try
{
String url = "jdbc:mysql://localhost:3306/javalocadora";
String usuario = "root";
String senha = "210683";
Class.forName("com.mysql.jdbc.Driver");
Connection con;
con = DriverManager.getConnection(url,usuario,senha);
Statement st = con.createStatement();
st.executeUpdate("DELETE * FROM Clientes WHERE ID ="+JTableDados.getSelectedRow());
int[] l = JTableDados.getSelectedRows();
javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel)JTableDados.getModel();
for(int i = 0; i < l.length; i++)
dtm.removeRow(l[i] - i);
con.commit();
con.close();
}

Lembre-se que quando vc faz alguma alteração na tabela ou nos dados dela vc precisa fazer o commit.
Abraços

K

rogeriuslima

Obrigado… Vou fazer o teste aqui.

F

Só uma dúvida… O ID do produto coincide com o número da linha selecionada??

está certo voce dar um DELETE * FROM Clientes WHERE ID ="+JTableDados.getSelectedRow()???

Fernando

W

Eu costumo fazer assim na tabela

public void removeLinha(int linha) {

this.tableModel.removeRow(linha);

}

atraves dessa chamada

tabela.removeLinha(tabela.getSelectedRow());

para deletar no banco eu uso assim :

public Object retornaDado(int linha, int coluna) {

return (this.getModel().getValueAt(linha, coluna));

}

recuperando o identificar que eu quero.

Wallace

K

Fernando Generoso da Rosa

coincide sim

F

E voce está ciente que a primeira linha, em um getSelectedRow() irá retornar 0, certo??

K

Fernando Generoso da Rosa
Sim

K

Ainda não consegui resolver meu problema!

K

Alguém pode me ajudar

A

Você aperta em um botão para excluir a linha!??

K

ajfilho >>

Não. É no evento mouseClicked

olha abaixo:

JTableDados.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {

int status = JOptionPane.showConfirmDialog(null,Deseja excluir este cliente?,Atenção,JOptionPane.YES_NO_OPTION);

if (status == JOptionPane.YES_OPTION) {

try

{

String url = jdbc:mysql://localhost:3306/javalocadora;

String usuario = root;

String senha = 210683;

Class.forName(com.mysql.jdbc.Driver);

Connection con;

con = DriverManager.getConnection(url,usuario,senha);

Statement st = con.createStatement();

st.executeUpdate(DELETE * FROM Clientes WHERE ID =+JTableDados.getSelectedRow());

int[] l = JTableDados.getSelectedRows();

javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel)JTableDados.getModel();

for(int i = 0; i < l.length; i++)

dtm.removeRow(l[i] - i);

con.close();

}

catch(Exception event) {

JOptionPane.showMessageDialog(null,Não foi possível estabelecer conexão com o banco de dados!”,Erro,JOptionPane.ERROR_MESSAGE);

}

}

}});
Criado 29 de novembro de 2008
Ultima resposta 11 de dez. de 2008
Respostas 13
Participantes 5