(Resolvido)Guardando multiplas rows de uma jtable no Mysql

2 respostas
T

Bom dia, sou novo no mundo java e estou com o seguinte problema, tenho duas jtable e estou pegando algum valores da primeira e setanto na segunda e tentando pega todos os valores da segunda e guarda em um tabela do mysql, mas sempre da o segunte erro.

Obs: os teste que eu fiz foi com dois valores(duas rows na segunda jtable);

Exception in thread AWT-EventQueue-0 java.lang.ArrayIndexOutOfBoundsException: 2 >= 2

at java.util.Vector.elementAt(Vector.java:427)

at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)

at javax.swing.JTable.getValueAt(JTable.java:2695)

at Venda.btVendaActionPerformed(Venda.java:442)

at Venda.access$600(Venda.java:33)

at Venda$9.actionPerformed(Venda.java:230)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)

at java.awt.Component.processMouseEvent(Component.java:6263)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)

at java.awt.Component.processEvent(Component.java:6028)

at java.awt.Container.processEvent(Container.java:2041)

at java.awt.Component.dispatchEventImpl(Component.java:4630)

at java.awt.Container.dispatchEventImpl(Container.java:2099)

at java.awt.Component.dispatchEvent(Component.java:4460)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)

at java.awt.Container.dispatchEventImpl(Container.java:2085)

at java.awt.Window.dispatchEventImpl(Window.java:2475)

at java.awt.Component.dispatchEvent(Component.java:4460)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

o Codigo que eu estou usando para isso e o seguinte.

int loop;
for (loop = 0; loop <= linhas; loop++) { //linhas armazena a quantidades de linhas da minha tabela

int cod = Integer.parseInt((String) tabVenda.getValueAt(loop, 0));
        double val = Double.parseDouble((String) tabVenda.getValueAt(loop, 3));
        double quant = Double.parseDouble((String) tabVenda.getValueAt(loop, 4));
        Date ddata = null;
        try {
            ddata = new java.sql.Date(((java.util.Date) formatter.parse(txtData.getText())).getTime());
        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(this, "ERRO DE CONVERÇÃO DE DATA");
        }

        try {
            Conecta.comando.executeUpdate("insert into venda(vend_cod_prod, vend_quantidade, vend_valor, vend_data) " +
                    "values('" + cod + "','" + quant + "','" + val + "','" + ddata + "')");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro na Insersão da venda\n" + ex);
        }
    }

Isso deve ser um coisa simples de se fazer ja pesquisei e não encontrei nada do genero :frowning: .

Obrigado!!!

2 Respostas

raci0nal

Amigo,
Em primeiro lugar, quando for postar código utilize a tag “Code”.
Quanto ao erro, está ocorrendo por um problema de lógica ao iterar os itens da JTable.
Você não mencionou o código que atribui o valor à variável “linhas”, mas eu presumo que seja:

linhas = tabela.getRowCount();

Quando você faz o laço de 0 até que seja menor ou igual ao “rowCount”, acontece um erro quando chega na última passada.
Você deve saber que os itens de coleções no Java (e no mundo da programação em geral) começam no 0, por isso fez o laço começar no zero. Mas o seu laço de repetição deve executar apenas enquanto “loop” for menor que a quantidade de linhas.
Do jeito que está ele tá fazendo
0 - (loop < linhas) - pega a linha 0
1 - (loop < linhas) - pega a linha 1
2 - (loop = linhas) - ops, não existe a linha 2

Mude para:for (loop = 0; loop < linhas; loop++) { }
Qualquer problema, escreva.

Marcos Antonio Campos Jordão’’
PS: Nossa acho que eu escrevi texto demais para pouco problema… rs

T

:roll: O amigo muito obrigado, realmente e um erro de lógica mesmo, eu estava tão preocupado com o manipulação das tabelas que esqueci desse detalhe muito obrigado e desculpe o incomodo.

Vlw :roll:

Criado 15 de novembro de 2009
Ultima resposta 15 de nov. de 2009
Respostas 2
Participantes 2