Excluir dados da Jtable e do BD

2 respostas
M

Olá Pessoal,
Tenho uma classe que executa uma consulta no Mysql e mostra o resultado em uma Jtable, preciso deletar um registro na table e no BD quando ele for selecionado na Jtable como faço isso, segue o código:

public class JanelaConsulta extends JFrame implements ActionListener{

JButton Alterar;

JButton Excluir;

JButton Fechar;

static public String SMarca, SModelo, SCor, SAno, SPreco, SObservacoes;

static public Connection conexao = null;

static public ResultSet resultado = null;

static public Statement instrucao = null;

static public String caminho = jdbc:mysql://127.0.0.1:3306/java”;
public JanelaConsulta () {

setTitle(Consulta dos Dados Cadastrados);

setSize(580, 200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setLocationRelativeTo(null);

Alterar = new JButton(Alterar);

Alterar.setActionCommand(Alterar);

Excluir = new JButton(Excluir);

Excluir.setActionCommand(Excluir);

Fechar = new JButton(Fechar);

Fechar.setActionCommand(Fechar);

Alterar.addActionListener(this);

Fechar.addActionListener(this);

Excluir.addActionListener(this);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel painel = new JPanel();

Container c = getContentPane();

c.setLayout(new FlowLayout());

c.add(Alterar);

c.add(Excluir);

c.add(Fechar);

JTable tabela = getJanelaConsulta();

JScrollPane scroll = new JScrollPane(tabela);

tabela.setPreferredScrollableViewportSize(new Dimension(500, 95));

getContentPane().add(scroll, BorderLayout.CENTER);

}
public void actionPerformed(ActionEvent e) {

if (Fechar”.equals(e.getActionCommand())) {

dispose();

}

if (Alterar”.equals(e.getActionCommand())) {

}
if (“Excluir”.equals(e.getActionCommand())) {

}
}

private JTable getJanelaConsulta() {

try {

System.out.println(1. registra o driver);

DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
System.out.println("2. ");

conexao = DriverManager.getConnection(caminho, teste, 123);

instrucao = conexao.createStatement();
System.out.println(3. executa query);

String sql = SELECT * FROM carros ORDER BY Marca;

resultado = instrucao.executeQuery(sql);

Vector colunas = new Vector();

colunas.add(Marca);

colunas.add(Modelo);

colunas.add(Cor);

colunas.add(Ano);

colunas.add(Preço);

colunas.add(Observações);

Vector dados = new Vector();

while (resultado.next()) {

Vector linha = new Vector();

SMarca = resultado.getString(Marca);

SModelo = resultado.getString(Modelo);

SCor = resultado.getString(Cor);

SAno = resultado.getString(Ano);

SPreco = resultado.getString(Preco);

SObservacoes = resultado.getString(Observacoes);

linha.add(SMarca);

linha.add(SModelo);

linha.add(SCor);

linha.add(SAno);

linha.add(SPreco);

linha.add(SObservacoes);

dados.add(linha);

}

JTable table = new JTable(dados, colunas);

return table;

}

catch (SQLException E) {

System.out.println("---------------------------------");

System.out.println(Erro ao acessar o banco de dados);

System.out.println("SQLException: " + E.getMessage());

System.out.println(SQLState: " + E.getSQLState());

System.out.println(“VendorError: " + E.getErrorCode());

System.out.println(---------------------------------);

E.printStackTrace();

return null;

}

}

}

Obrigado,

Mauro

2 Respostas

I

Faz tempo que não uso tabelas mas o procedimento é mais ou menos assim:

  1. Identifica a linha selecionada da tabela.
int row = table.getSelectedRow();
  1. Pela o modelo de dados que tu tens.
DefaultTabelModel model = (DefaultTableModel) table.getTableModel();
  1. Procura dentro do table model a linha selecionada e remove ela.
model.removeRow(row);
  1. Faz um refresh da tela.
table.revalidate();
table.repaint();

Nos passos 2) e 3) tu podes usar também:

table.removeRowSelectionInterval(row, row);
table.revalidate();
table.repaint();

Não esquece de que antes de remover da tabela, deves pegar o objeto da lista e removê-lo do banco:

//representa a classe do modelo de dados...
MyObject selected = (MyObject) model.getValueAt(row); 

//pega a(s) pk(s) dele...
int id = selected.getId();

//repassa ao teu Broker para remover do banco.
new MyObjectBroker().delete(id);

Espero que te ajude, T+

M

Olá,

Caro Iktuz,

Sou leigo no assunto, naum entendi. Daria pra vc me dizer como ficaria meu codigo pra isso. Tenho a Jtable e um botão excluir, gostaria de excluir o registro do BD e da Jtable.

Obrigado,

Mauro

Criado 28 de novembro de 2006
Ultima resposta 29 de nov. de 2006
Respostas 2
Participantes 2