AbstractTableModel - Como fazer Update no MySQL?

Boa tarde!!

Finalmente consegui implementar uma AbstractTableModel!!

ALELUIA!!!

Realmente sinto ter perdido tanto tempo com o DefaultTableModel, mas enfim…

Estou com um problema clássico de quem acaba de aprender algo: Não consigo compreender como devo fazer para que após a alteração na tabela seja feita ( listener ), o meu banco de dados seja alterado também.

A coluna da tabela eu consegui fazer e está alterando corretamente, mas não entendi como vou fazer o UPDATE.

Vi o ViniGodoy mencionando que seria na view, mas eu ainda não consegui.

Uma outra dúvida seria: montei a tabela, blz, mas não consigo saber qual é o ID dela no meu banco, mas no Select eu pego o ID também…

Enfim galera, sei que é coisa de Noob, mas ALELUIA!! Já saí da DefaultTableModel!!!

Obrigado pela ajuda!

Alguém aí pessoal??

Alguém tem algum material ou link que eu possa ver??

1 curtida

Já fiz isso. Ficou assim:

Na table model, no método setValueAt, seto o novo valor no objeto e chamo um método para alterar no banco:

public void setValueAt(Object newValue, int rowIndex, int columnIndex) {
	Contato contato = dados.get(rowIndex);
	if (columnIndex == COL_NOME) contato.getUsuario().setNome((String) newValue);
	if (columnIndex == COL_CELULAR) contato.getUsuario().setTelefone((String) newValue);
	if (columnIndex == COL_RAMAL) contato.getUsuario().setRamal((String) newValue);
	if (columnIndex == COL_EMAIL) contato.getUsuario().setEmail((String) newValue);
	fireTableCellUpdated(rowIndex, columnIndex);
}
```

O método que altera o banco fiz assim:
```
public void fireTableCellUpdated(int row, int column) {
	try {
		Contato contato = getRow(row);
		new ContatoController().atualizar(contato);
	} catch (Exception e) {
		JOptionPane.showMessageDialog(null, "Erro ao atualizar contato.");
	}
}
```

Dessa forma, quando o cara edita um valor na célula e dá um ENTER, um update é feito no banco em seguida.

Não sei se é a melhor forma, pq tem anos que implementei esse código, mas funcionou.

Lucastody, obrigado pelo retorno!

Quase lá!!! Só estou curioso para entender a sua classe ContatoController().atualizar(contato);

Ainda estou com a pulga atrás da orelha pq como faço hoje, repasso os valores para o Update entende…

Poderia postar esta sua classe para eu olhar, por favor?

Obtigado!

Nessa aplicação, usei o hibernate, e faço o update assim:

getSession().save(contato);

putz, faço DAO… me lasquei…

O update que faço também está num DAO. A diferença é que ele monta o update pra mim. Se eu fosse fazer sem hibernate, iria montar o update na mão.

Qual sua dificuldade?

Então…

Quando faço um “update” com DAO, passo os valores assim:

Pagamento m1 = new Pagamento();
                MascaraDao dao = new MascaraDao();

                java.sql.Timestamp ts = new Timestamp(System.currentTimeMillis());

                m1.setDataAlteracao(ts.toString());
                m1.setUsuarioAlteracao(usrLog);
                m1.setLogIncremento("s$p$e " + formatador.formataDataHoraRetornaCampo(ts.toString()) + "  - / -  " + usrLog + " s$p$d" + "\nPeríodo Inserido: "
                        + jCBPeriodoMes.getSelectedItem().toString() + " - " + jCBPeriodoAno.getSelectedItem().toString() + " Filial: " + jCBPeriodoFilial.getSelectedItem().toString() + "P$L$S");
                m1.setIdPagamento(idPagamento);
                m1.setPeriodoMes(jCBPeriodoMes.getSelectedItem().toString());
                m1.setPeriodoAno(jCBPeriodoAno.getSelectedItem().toString());

                dao.alterarPeriodoPagamento(m1);

E passo para o controler pelo dao.alteraPeriodoPagamento(m1);

Na classe que você passou, a fireTableCellUpdated, como eu ‘informo’ estes valores para o meu Dao??