Gravar do Jtable pro banco de dados

6 respostas
P

Galera me ajudem please, preciso gravar dados de uma jtable para o postgres, o que eu não sei é como percorrer as linha para pegar os dados dela para jogar no meu sql, tenho que percorrer linha por linha? como faço isso?

6 Respostas

ViniGodoy

Você não tem que jogar os dados do JTable para o postgres. Seu JTable exibe algum dado, de algum lugar (normalmente de uma estrutura que está dentro do seu TableModel). É essa estrutura que você deve jogar para o postgres.

E isso provavelmente vai ser um arraylist de objetos normal.

P

ok. fiz assim e deu certo só que quando vou adicionar outro ítem ele sobrepõe o primeiro que eu ja tinha colocado na jtable, ele não adiciona em outra linha segue o código:

modelo1.addRow(new Object [] {tf_codigo.getText(),cbProduto.getSelectedItem(),tfCodProd.getText(),tfQuantidade.getText(),tfPrecoCusto.getText(),tfPrecoVenda.getText()});

ViniGodoy

Bom. Seu modelo é um DefaultTableModel, certo? O erro já começa por aí. Usar o DefaultTableModel é pedir por horas de estresse, por código duplicado, ilegível e difícil de manter. O DefaultTableModel está mais para um exemplo, do que para uma funcionalidade real.

Do contrário, aprenda a lidar com TableModel, e faça o seu. Aqui estão ótimos tutoriais para isso:
http://www.informit.com/articles/article.aspx?p=332278
http://www.informit.com/articles/article.aspx?p=333472

E aqui está um exemplo de um TableModel:
http://www.guj.com.br/posts/list/98452.java#530523

Garanto que assim que você entender a maneira correta de resolver o problema, essa e outras dúvidas em relação a tabelas desaparecerão.

Metaleiro

[color=darkblue] Não sei se te ajuda, eu fiz um dessa forma :[/color]

javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel)table.getModel();
            int count = 0;

        do {
                quant = dtm.getValueAt(count, 0) == null ? 0 : dtm.getValueAt(count, 0)  ;
                produto = dtm.getValueAt(count, 1) == null ? "" :dtm.getValueAt(count, 1);
                largura = dtm.getValueAt(count, 2) == null ? "" :dtm.getValueAt(count, 2);
                altura = dtm.getValueAt(count, 3) == null ? "" :dtm.getValueAt(count, 3);
                ambiente = dtm.getValueAt(count, 4) == null ? "" :dtm.getValueAt(count, 4);
                valor = dtm.getValueAt(count, 5) == null ? "" :dtm.getValueAt(count, 5);

                produtoVO.setQuantidade(Integer.valueOf(quant.toString()));
                produtoVO.setProduto(produto.toString());
                produtoVO.setLargura(largura.toString());
                produtoVO.setAltura(altura.toString());
                produtoVO.setAmbiente(ambiente.toString());
                produtoVO.setValor(valor.toString());
                produtoVO.setIdCliente(maximo);

                produtoDAO.insereProduto(produtoVO);

                count++;

        } while (count != dtm.getRowCount());
             JOptionPane.showMessageDialog(null, "Cadastro realizado !");
        }
ViniGodoy

Se seu código é assim, deve ser muito difícil mudar o número de uma coluna sem quebrar diversos trechos do seu programa.
Volto a dizer, esqueçam o DefaultTableModel e estudem a construção de um model próprio. Vocês estão tornado o código mais complexo e mais difícil de manter desnecessariamente.

Metaleiro

ViniGodoy:
Se seu código é assim, deve ser muito difícil mudar o número de uma coluna sem quebrar diversos trechos do seu programa.
Volto a dizer, esqueçam o DefaultTableModel e estudem a construção de um model próprio. Vocês estão tornado o código mais complexo e mais difícil de manter desnecessariamente.

[color=darkblue] Vou procurar estudar, fiz assim porque era basicamente o que eu conhecia, sempre é melhor facilitar[/color]

Criado 14 de abril de 2009
Ultima resposta 15 de abr. de 2009
Respostas 6
Participantes 3