Pegar todos as linhas de uma JTable e gravar no banco de dados

5 respostas
L

[size=18]Tenho uma aplicação onde insiro numa JTable o nome do equipamento e a quantidade , após clicar em INSERIR , a tabela é preenchida com esses valores digitados.
Gostaria de gravar todos esses valores numa tabela no banco de dados mysql… como eu faço isso? com a opção de getSelected … ???

aguardo resposta !

obrigado![/size]

5 Respostas

fernandopaiva

Seguinte, esses valores q vc insere na JTable vem de onde ??? Vc edita a propria JTable ou usa JTextFields para ir preenchendo a JTable ???

1 - Se vc edita a JTable, evite isso pois é mais suscetível a erros.
2 - Se vc usa JTextFields para ir preenchendo os valores na JTable, existe 2 maneiras de se fazer isso.
A primeira maneira é ir inserindo os valores no banco e conforme insere da um select para exibir esses valores na JTable
A segunda maneira é preencher toda JTable com os valores e depois usar um for ou um while para ir pegando os valores nas colunas, tbm acho muito suscetível a erros

Eu pessoalmente prefiro ir inserindo os valores no banco de dados e depois dar um select para exibi-los, ja usei muito a segunda maneira de ir preenchendo a JTable para depois gravar tudo, mas imagine se cair a energia por exemplo, o usuário vai perder tudo o q fez. Um amigo meu uma vez me disse isso, eu parei pra pensar e realmente é mais seguro inserir no banco e dar um select pra exibir…Outro motivo q me fez deixar de usar essa maneira de preencher a JTable e depois gravar tudo foi quanto a falhas de valores, algumas raras vezes eu percebi q gerava um erro no for, parecia q naum conseguia pegar o valor e dava uma Exception ou deixava de funcionar por um motivo nada aparente…Foi ai entaum q fiquei mais motivado a usar o Insert/Select, e acabaram-se meus problemas.

t+ e boa sorte.

L

é isso mesmo, os dados vem de um JTextField …

no caso eu tenho que inserir 2 dados, 1 com o tipo de equipamento e outro com a quantidade. Após clicar no botão INSERIR esses dados aparece numa JTable.

Só que na minha tabela do banco de dados é assim : Tabela Perfil ( onde tenho que inserir vários equipamentos para o mesmo perfil, onde é designado por um código ). Então seria melhor eu pegar esses valores já da JTable e armazenar nessa tabela, ao invés de inserir 1 equipamento por ver !

tinha feito isso já , inserir 1 equipamento por ver, só que a interface não fica muito boa, então decidi colocar esses dados numa jTable antes de INSERIR no banco de dados…

alguma outra opção ??

grato

fernandopaiva

bem, como eu disse eu prefiro a opção de dar um insert nos campos e depois exibi-los na jtable, mas se de tudo vc naum pensa assim, vou te mandar um exemplo de como fazer para inserir na JTable e depois gravar.

veja

public void addProdutoTabela() throws SQLException{        
         //metodo q adiciona produtos na JTable           
            double qtd = Double.valueOf(quantidade.getText().replaceAll("\\.", "").replace(",","."));

            if(codigoProduto.getText().equals("") || qtd <= 0){
                JOptionPane.showMessageDialog(null, "Informe o código e a quantidade do produto que deseja adicionar.");
                codigoProduto.requestFocus();
            }else{
                int codP = Integer.valueOf(codigoProduto.getText());
                        //aqui eu adiciono os valores dos JTextFields a JTable
                        DefaultTableModel tabela = (DefaultTableModel)tabelaCompras.getModel();
                        tabela.addRow(new Object[]{
                                    codigoProduto.getText(),
                                    produto.getText(),
                                    codTProduto.getText(),
                                    tipoProduto.getText(),
                                    valorUnitario.getText(),
                                    quantidade.getText(),
                                    total.getText(),
                                    });
            }
        
    }
 

//metodo q grava os valores da JTable
PreparedStatement stm = con.prepareStatement("INSERT INTO caixa (codcontrole, datafechamento, datamovimento, "
                + " horaentrada, horafechamento, codigoproduto, codigotproduto, valorunitario, quantidade, totalcompra,"
                + " porcentogarcom, comissaogarcom, divideconta, valorcover, valordesconto, totalbruto, totalliquido,"
                + " valorporpessoa, valorpago, valortroco, tipomovimento, horacompra, codcaixa, codcliente, tipovenda, codusuario) "
                + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
         stm.setInt(1, codControle);
         stm.setDate(2, java.sql.Date.valueOf(new Data().formataDataBD()));
         stm.setDate(3, java.sql.Date.valueOf(new Data().formataDataBD()));
         stm.setTime(4, Time.valueOf(new ControlaMesas().retornaHoraAtual()));
         stm.setTime(5, Time.valueOf(new ControlaMesas().retornaHoraAtual()));
         stm.setDouble(15, Double.valueOf(valorDesconto.getText().replaceAll("\\.","").replace(",",".")));
         stm.setDouble(16, Double.valueOf(valorBruto.getText().replaceAll("\\.","").replace(",",".")));
         stm.setDouble(17, Double.valueOf(valorLiquido.getText().replaceAll("\\.","").replace(",",".")));
         stm.setDouble(19, Double.valueOf(valorPago.getText().replaceAll("\\.","").replace(",",".")));
         stm.setDouble(20, Double.valueOf(valorTroco.getText().replaceAll("\\.","").replace(",",".")));
         stm.setString(21, "BALCÃO");
         stm.setInt(23, new ControlaCaixa().retornaCodigoCaixa()); //codigo do caixa

         stm.setInt(24, Integer.parseInt(codCliente.getText()));
         stm.setString(25, tipoVenda.getSelectedItem().toString());
         stm.setInt(26, new ControlaLoginSistema().getCodigoUsuario());

         //valores nulos
         
         stm.setDouble(11, Double.valueOf(0));
         stm.setInt(12, Integer.valueOf(0));
         stm.setDouble(13, Double.valueOf(0));
         stm.setDouble(14, Double.valueOf(0));
         stm.setDouble(18, Double.valueOf(0));

         //---------
         String codProduto = "";  // codigo produto     0
         int codP = 0;
         String codTProduto = ""; // codigo t produto   2
         int codTP = 0;
         String valorU = "";      // valor unitario     4
         double valorUnit = 0;
         String qtd = "";         // quantidade         5
         double qtde = 0;
         String valorT = "";      // valor              6
         double valorTotal = 0;

         //esse for é o q pega os valores da JTable para Inserir
         for(int x = 0; x < tabelaCompras.getRowCount();x++){            
            codProduto = String.valueOf(tabelaCompras.getValueAt(x, 0));
            codP = Integer.parseInt(codProduto);
            stm.setInt(6, codP);

            codTProduto = String.valueOf(tabelaCompras.getValueAt(x, 2));
            codTP = Integer.parseInt(codTProduto);
            stm.setInt(7, codTP);

            valorU = String.valueOf(tabelaCompras.getValueAt(x, 4));
            valorUnit = Double.parseDouble(valorU.replaceAll("\\.","").replace(",","."));
            stm.setDouble(8, valorUnit);

            qtd = String.valueOf(tabelaCompras.getValueAt(x, 5));
            qtde = Double.parseDouble(qtd.replaceAll("\\.","").replace(",","."));
            stm.setDouble(9, qtde);

            valorT = String.valueOf(tabelaCompras.getValueAt(x, 6));
            valorTotal = Double.parseDouble(valorT.replaceAll("\\.","").replace(",","."));
            stm.setDouble(10, valorTotal);

            stm.setTime(22, Time.valueOf((String)tabelaCompras.getValueAt(x, 7)));
            stm.execute();
         }

Como falei, é bem mais trabalhoso e mais suscetível a erros, eu acredito q naum compensa usar essa maneira…Esse exemplo, é um q fiz qdo estava começando na época mexia com gravar tudo da JTable hoje prefiro Inserir e depois dar um Select.

t+ e boa sorte ae.

L

Valeu cara !! eu vou tentar aqui, qualquer coisa eu mando outra mensagem !!

abraço e fica com Deus

L

Então, tava tentando fazer desse jeito ai e não consegui…

No meu caso, eu tenho a classe de Interface e a classe DAO .
A classe Interface chama a DAO

é parecido com isso : perfil_DAO dao = new perfil_DAO ();

ado.inserirBD = ( jTextField1.getText(), jTextField2.getText (), jTable1..... )

qual vai ser o método da jTable que irei colocar ali para inserir TODOS os valores que contem nela para dentro do inserirBD ???

Criado 1 de novembro de 2011
Ultima resposta 2 de nov. de 2011
Respostas 5
Participantes 2