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

F

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

F

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