Duvida sobre jTable[RESOLVIDO]

6 respostas
couta

e ai galera....to com um erro aqui e nao consigo resolver...ja fiz vários testes de mesa e até onde eu percebi era para funcionar..
ta acusando um erro "Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1" não sei direto o que quer dizer, mas penso q é algo q esta estourando meu for(int i=0; i< seq;i++)

tenho um programa de controle de saida e retorno de carros..
entao cada saida e retorno esta relacionada a uma data e a um turno...
quando eu só tenho um dia cadastrado com todas as saidas e retornos desse unicio dia ou seja somento o primeiro cadastrado no banco e nda mais...tudo bem..tudo funciona...o problema é quando eu troco de dia..por exemplo
cadastrei varias saidas e seus retornos do dia 17/12/2009, agora passou o dia 17 e outro turno irá trabalhar e ja é dia 18/12/2009 e precisa fazer o login deles. pq cada saida e rotorno esta relacionada a um dia e a um turno... mas quando eu seto esse novo dia e dou as saidas deste dia tudo bem, problema é quando eu quero mostrar as saidas e retornos deste novo dia q é o dia 18/12/2009 ele nao mostra nda e da esse erro Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1"
tenho duas jtable uma para saida que é a jTable2_ANDAMENTO e a de retorno que é jTable2_REALIZADA

public void GridRetorno()throws SQLException{
        try {
            // cria a instancia de Statement
            Connection conn = sd.getConnection();
            Statement stmt = conn.createStatement();

            //JOptionPane.showMessageDialog(null,"retorno");

            DefaultTableModel dtm = (DefaultTableModel)jTable2_REALIZADA.getModel();
            dtm.setRowCount(0);

            //executa a consulta
            int seq = 0;
            ResultSet rset,rset3;
            rset3 = stmt.executeQuery("SELECT seq_servico.nextVal AS proximo FROM DUAL");

            if (rset3.next()) {
                seq = rset3.getInt("proximo");
            }
            String saida="";
            rset3 = stmt.executeQuery("select * from sv");
            //VAI PEGAR A DATA DO ULTIMO SERVIÇO E GUARDAR EM "SAIDA"
            for(int i=0;i<seq;i++){
                if(rset3.next()){
                    saida=rset3.getString("data_sv");

                }
            }


            rset = stmt.executeQuery("SELECT seq_retorno.nextVal AS proximo FROM DUAL");
            //VAI PEGAR O NÚMERO DA SEQUENCIA ONDE PARO..
            if (rset.next()) {
                seq = rset.getInt("proximo");
            }

            rset = stmt.executeQuery("Select * from retornoviatura");
            
            
            //percorre todos os registros da consulta e para cada registro
            //percorre as colunas mostrando o conteudo de cada coluna
            
            int i =0;
            for(i=0;i<seq;i++){
                if (rset.next() && rset.getString("data").equalsIgnoreCase(saida)) {
                    acrescentaLinhaRealizado();
                    String regfab = rset.getString(1);
                    String motorista = rset.getString(2);
                    String kmsaida = rset.getString(3);
                    String hora = rset.getString(4);
                    String destino = rset.getString(7);
                    String naturezaSV = rset.getString(6);
                    String solicitante = rset.getString(5);
                    String numFicha = rset.getString(11);
                    String kmchegada = rset.getString(9);
                    String horachegada = rset.getString(8);
                    
                    //acrescentaLinhaRealizado();

                    jTable2_REALIZADA.setValueAt(regfab, i, COLUNA_REGFAB2);
                    jTable2_REALIZADA.setValueAt(motorista, i, COLUNA_MOTORISTA2);
                    jTable2_REALIZADA.setValueAt(kmsaida, i, COLUNA_KMSAIDA2);
                    jTable2_REALIZADA.setValueAt(hora, i, COLUNA_HORA2);
                    jTable2_REALIZADA.setValueAt(destino, i, COLUNA_DESTINO2);
                    jTable2_REALIZADA.setValueAt(naturezaSV, i, COLUNA_NATUREZASV2);
                    jTable2_REALIZADA.setValueAt(solicitante, i, COLUNA_SOLICITANTE2);
                    jTable2_REALIZADA.setValueAt(numFicha, i, COLUNA_NUMFICHA2);
                    jTable2_REALIZADA.setValueAt(kmchegada,i,COLUNA_KMCHEGAFA2);
                    jTable2_REALIZADA.setValueAt(horachegada, i, COLUNA_HORACHEGADA2);
                    //jTextField3_DATA.setText(data);
                }
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(missoesGrid.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(missoesGrid.class.getName()).log(Level.SEVERE, null, ex);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(missoesGrid.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(missoesGrid.class.getName()).log(Level.SEVERE, null, ex);
        }
        

       
    }
    public void GridAndamento() throws SQLException{
        try {

            // cria a instancia de Statement
            Connection conn = sd.getConnection();
            Statement stmt = conn.createStatement();

             //JOptionPane.showMessageDialog(null,"andamento");

            DefaultTableModel dtmm = (DefaultTableModel)jTable1_ANDAMENTO.getModel();
            dtmm.setRowCount(0);
            

            //executa a consulta
            int seq = 0;
            ResultSet rset,rset3;
            rset3 = stmt.executeQuery("SELECT seq_servico.nextVal AS proximo FROM DUAL");

            if (rset3.next()) {
                seq = rset3.getInt("proximo");
            }
            String saida="";
            //VAI PEGAR A DATA DO ULTIMO SERVIÇO E GUARDAR EM "SAIDA"
            rset3 = stmt.executeQuery("select * from sv");
            
            for(int i=0;i<seq;i++){
                if(rset3.next()){
                    saida=rset3.getString("data_sv");

                }
            }
            jLabel6_data.setText(saida);


            rset = stmt.executeQuery("SELECT seq_saida.nextVal AS proximo FROM DUAL");
            //VAI BUSCAR O VALOR DA SEQUENCIA
            if (rset.next()) {
                seq = rset.getInt("proximo");
                System.out.print(seq);
            }

            rset = stmt.executeQuery("Select * from saidaviatura");
            
            
            
           
             int i =0;
            for(i=0;i<seq;i++){
                if (rset.next() && rset.getString("data").equalsIgnoreCase(saida)) {
                    acrescentaLinhaAndamento();
                    String regfab = rset.getString(1);
                    String motorista = rset.getString(2);
                    String kmsaida = rset.getString(3);
                    String hora = rset.getString(4);
                    String destino = rset.getString(7);
                    String naturezaSV = rset.getString(6);
                    String solicitante = rset.getString(5);
                    String numFicha = rset.getString(11);
                    String antigo = rset.getString(12);
                    String moderno = rset.getString(13);
                    String data = rset.getString(10);
                    //acrescentaLinhaAndamento();
                    bean.setMaisAntigo(antigo);
                    bean.setMaisModerno(moderno);
                    bean.setData(data);
                    jLabel6_MAIS_ANTIGO.setText(antigo);
                    jLabel7_MAIS_MODERNO.setText(moderno);
                    //jLabel6_data.setText(data);

                    jTable1_ANDAMENTO.setValueAt(regfab, i, COLUNA_REGFAB);
                    jTable1_ANDAMENTO.setValueAt(motorista, i, COLUNA_MOTORISTA);
                    jTable1_ANDAMENTO.setValueAt(kmsaida, i, COLUNA_KMSAIDA);
                    jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);
                    jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);
                    jTable1_ANDAMENTO.setValueAt(destino, i, COLUNA_DESTINO);
                    jTable1_ANDAMENTO.setValueAt(naturezaSV, i, COLUNA_NATUREZASV);
                    jTable1_ANDAMENTO.setValueAt(solicitante, i, COLUNA_SOLICITANTE);
                    jTable1_ANDAMENTO.setValueAt(numFicha, i, COLUNA_NUMFICHA);
                }
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(missoesGrid.class.getName()).log(Level.SEVERE, null, ex);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(missoesGrid.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(missoesGrid.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        
    }

6 Respostas

edmarr
simples assim ,
int i =0;  
             for(i=0;i<(seq-1);i++){    // Pois vc tem a quantidade de itens porem o index do comecou com = 0 rsrsrs 
                 if (rset.next() && rset.getString("data").equalsIgnoreCase(saida)) {  
                     acrescentaLinhaAndamento();  
                     String regfab = rset.getString(1);  
                     String motorista = rset.getString(2);  
                     String kmsaida = rset.getString(3);  
                     String hora = rset.getString(4);  
                     String destino = rset.getString(7);  
                     String naturezaSV = rset.getString(6);  
                     String solicitante = rset.getString(5);  
                     String numFicha = rset.getString(11);  
                     String antigo = rset.getString(12);  
                     String moderno = rset.getString(13);  
                     String data = rset.getString(10);  
                     //acrescentaLinhaAndamento();  
                     bean.setMaisAntigo(antigo);  
                     bean.setMaisModerno(moderno);  
                     bean.setData(data);  
                     jLabel6_MAIS_ANTIGO.setText(antigo);  
                     jLabel7_MAIS_MODERNO.setText(moderno);  
                     //jLabel6_data.setText(data);  
   
                     jTable1_ANDAMENTO.setValueAt(regfab, i, COLUNA_REGFAB);  
                     jTable1_ANDAMENTO.setValueAt(motorista, i, COLUNA_MOTORISTA);  
                     jTable1_ANDAMENTO.setValueAt(kmsaida, i, COLUNA_KMSAIDA);  
                     jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);  
                     jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);  
                     jTable1_ANDAMENTO.setValueAt(destino, i, COLUNA_DESTINO);  
                     jTable1_ANDAMENTO.setValueAt(naturezaSV, i, COLUNA_NATUREZASV);  
                     jTable1_ANDAMENTO.setValueAt(solicitante, i, COLUNA_SOLICITANTE);  
                     jTable1_ANDAMENTO.setValueAt(numFicha, i, COLUNA_NUMFICHA);  
                 }  
             }
Vc simplesmente pode fazer assim
while(rset.next()){
                   if (rset.getString("data").equalsIgnoreCase(saida)) {  
                     acrescentaLinhaAndamento();  
                     String regfab = rset.getString(1);  
                     String motorista = rset.getString(2);  
                     String kmsaida = rset.getString(3);  
                     String hora = rset.getString(4);  
                     String destino = rset.getString(7);  
                     String naturezaSV = rset.getString(6);  
                     String solicitante = rset.getString(5);  
                     String numFicha = rset.getString(11);  
                     String antigo = rset.getString(12);  
                     String moderno = rset.getString(13);  
                     String data = rset.getString(10);  
                     //acrescentaLinhaAndamento();  
                     bean.setMaisAntigo(antigo);  
                     bean.setMaisModerno(moderno);  
                     bean.setData(data);  
                     jLabel6_MAIS_ANTIGO.setText(antigo);  
                     jLabel7_MAIS_MODERNO.setText(moderno);  
                     //jLabel6_data.setText(data);  
   
                     jTable1_ANDAMENTO.setValueAt(regfab, i, COLUNA_REGFAB);  
                     jTable1_ANDAMENTO.setValueAt(motorista, i, COLUNA_MOTORISTA);  
                     jTable1_ANDAMENTO.setValueAt(kmsaida, i, COLUNA_KMSAIDA);  
                     jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);  
                     jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);  
                     jTable1_ANDAMENTO.setValueAt(destino, i, COLUNA_DESTINO);  
                     jTable1_ANDAMENTO.setValueAt(naturezaSV, i, COLUNA_NATUREZASV);  
                     jTable1_ANDAMENTO.setValueAt(solicitante, i, COLUNA_SOLICITANTE);  
                     jTable1_ANDAMENTO.setValueAt(numFicha, i, COLUNA_NUMFICHA);  

                 }
couta

nao é simples assim cara…

eu fiz ali for(int i=0;i<seq;i++) entao digamos q seq =10; “i” vai de 0 até 9 ou seja 10 posiçoes…se fosse i<=seq ai sim… mas nao botei o sinal de =

continua dando o mesmo erro…

:frowning:

Alchemist

Cara ta muito confunso viu :s

rset3 = stmt.executeQuery("SELECT seq_servico.nextVal AS proximo FROM DUAL");

o que isto ai retorna ?

acrescentaLinhaRealizado();

e este metodo ai faz o que ?

passa o log do erro inteiro tb…

pedroroxd

Muito confuso cara…
Posta ae o que acrescentaLinhaRealizado() faz…

couta
rset3 = stmt.executeQuery("SELECT seq_servico.nextVal AS proximo FROM DUAL");
vai retorna o valor da sequencia do banco..da linha no caso... pro meu for() funcionar varrendo todo meu banco..foi assim q eu fiz nao sei se tem outra forma...cada item colocado no banco gera um numero sequencial 1,2,3,4,etc... e o metodo acrescentaLinhaRealizado() é o mesmo que acrescentaLinhaAndamento()
private void acrescentaLinhaRealizado(){

        DefaultTableModel dtm = (DefaultTableModel)jTable1_ANDAMENTO.getModel();
        int linha = dtm.getRowCount();
        dtm.setRowCount(linha+1);


    }
ESSE METODO VAI INSERINDO NOVAS LINHAS PARA MINHA JTABLE.. eu tenho duas JTABLE uma é a jTable1_ANDAMENTO e a outra jTable1_Realizado e em ambas o problema é o mesmo...

MAS EU AGORA ACHEI ONDE ESTA O ERRO..MAS AINDA NAO SEI O PQ...TA ALI NO "i"

jTable1_ANDAMENTO.setValueAt(regfab, i, COLUNA_REGFAB);     
    jTable1_ANDAMENTO.setValueAt(motorista, i, COLUNA_MOTORISTA);     
    jTable1_ANDAMENTO.setValueAt(kmsaida, i, COLUNA_KMSAIDA);     
    jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);     
    jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);     
    jTable1_ANDAMENTO.setValueAt(destino, i, COLUNA_DESTINO);     
    jTable1_ANDAMENTO.setValueAt(naturezaSV, i, COLUNA_NATUREZASV);     
    jTable1_ANDAMENTO.setValueAt(solicitante, i, COLUNA_SOLICITANTE);     
    jTable1_ANDAMENTO.setValueAt(numFicha, i, COLUNA_NUMFICHA);
quando chega na primeira linha para preencher a Jtable com os dados do banco ja estora ali na primeira que é
jTable1_ANDAMENTO.setValueAt(regfab, i, COLUNA_REGFAB);
mas lembrando que se eu tenho apenas uma DATA cadastrada..ou seja primeira vez q eu usei o programa ele funciona...todos os cadastros do dia 17/12/2009 digamos q essa data seja a unica a estar cadastrada no banco..meu sistema funciona normalmente...digamos q tenha 5 saidas para este dia..entao ali no for onde tem
for(i=0;i<(seq-1);i++){
o i vai de 0 até 4.. até ai tudo bem... agora troquei de dia..ja é dia 18/12/2009..fiz outras 4 saidas por exemplo entao meu seq que antes valia 5, agora vale 9(dos 5 de antes e mais os 4 de hj e assim vai..) entao supondo que ja estamos no dia 18/12/2009 ja tem mais de um dia cadastrado no banco..onde esta dando o erro... entao temos:
int i =0; 
//seq ta valendo 9 entao i vai de 0 até 8 totalizando 9posiçoes ele entra no for perfeito    
for(i=0;i<seq;i++){   

//no if ele pergunta se existe proximo la no banco se tiver ele pega a coluna data la do banco e compara com a string saida(que nela esta armazenada uma data)
// se for igual entao acrescenta linha na minha jTable pelo metodo acrescentaLinhaAndamento();
//grava todas as informaçoes la do banco nas minhas variaveis do tipo String regfab, motorista,kmsaida e etc..
    if (rset.next() && rset.getString("data").equalsIgnoreCase(saida)) {     
        acrescentaLinhaAndamento();     
        String regfab = rset.getString(1);     
        String motorista = rset.getString(2);     
        String kmsaida = rset.getString(3);     
        String hora = rset.getString(4);     
        String destino = rset.getString(7);     
        String naturezaSV = rset.getString(6);     
        String solicitante = rset.getString(5);     
        String numFicha = rset.getString(11);     
        String antigo = rset.getString(12);     
        String moderno = rset.getString(13);     
        String data = rset.getString(10);
 //bean e esse jlabel nao interfere em nda.....  
        bean.setMaisAntigo(antigo);     
        bean.setMaisModerno(moderno);     
        bean.setData(data);     
        jLabel6_MAIS_ANTIGO.setText(antigo);     
        jLabel7_MAIS_MODERNO.setText(moderno);     
        //chego aqui tudo perfeito......
//aparti dessa linha é onde esta o erro... ja estora na proxima linha onte é o jTable1_ANDAMENTO.setValueAt(regfab, i, COLUNA_REGFAB);     
//estora ali no [b]i[/b]
//lembrando que  vai entrar ali no [code]if (rset.next() && rset.getString("data").equalsIgnoreCase(saida)) {
apartir do for i=5.. dpois da posiçao 5 é que ele compara as duas String pois as posiçoes de i=0 até 4 o data é 17/12/2009 e apartir do indice 5 a data é 18/12/2009

//entao quando esse i ta valendo de 0 até 4 roda normal...quando o i ta valendo 5 em diante ele da o
// Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4>= 1

jTable1_ANDAMENTO.setValueAt(regfab, i, COLUNA_REGFAB);
jTable1_ANDAMENTO.setValueAt(motorista, i, COLUNA_MOTORISTA);
jTable1_ANDAMENTO.setValueAt(kmsaida, i, COLUNA_KMSAIDA);
jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);
jTable1_ANDAMENTO.setValueAt(hora, i, COLUNA_HORA);
jTable1_ANDAMENTO.setValueAt(destino, i, COLUNA_DESTINO);
jTable1_ANDAMENTO.setValueAt(naturezaSV, i, COLUNA_NATUREZASV);
jTable1_ANDAMENTO.setValueAt(solicitante, i, COLUNA_SOLICITANTE);
jTable1_ANDAMENTO.setValueAt(numFicha, i, COLUNA_NUMFICHA);
}
}
[/code]

couta

consegui arruma…ainda nao entendi mas fiz uma gambiarra e ta funcionando…

só mudei i por t

meu codigo ficou assim…igual so mudei o i pelo t

int i =0,t=0; for(i=0;i<seq-1;i++){ if (rset.next() && rset.getString("data").equalsIgnoreCase(data)) { acrescentaLinhaAndamento2(); String regfab = rset.getString(1); String motorista = rset.getString(2); String kmsaida = rset.getString(3); String hora = rset.getString(4); String destino = rset.getString(7); String naturezaSV = rset.getString(6); String solicitante = rset.getString(5); String numFicha = rset.getString(11); String antigo = rset.getString(12); String moderno = rset.getString(13); bean.setMaisAntigo(antigo); bean.setMaisModerno(moderno); bean.setData(data); jTable1_ANDAMENTO2.setValueAt(regfab, t, COLUNA_REGFAB); jTable1_ANDAMENTO2.setValueAt(motorista, t, COLUNA_MOTORISTA); jTable1_ANDAMENTO2.setValueAt(kmsaida, t, COLUNA_KMSAIDA); jTable1_ANDAMENTO2.setValueAt(hora, t, COLUNA_HORA); jTable1_ANDAMENTO2.setValueAt(hora, t, COLUNA_HORA); jTable1_ANDAMENTO2.setValueAt(destino, t, COLUNA_DESTINO); jTable1_ANDAMENTO2.setValueAt(naturezaSV, t, COLUNA_NATUREZASV); jTable1_ANDAMENTO2.setValueAt(solicitante, t, COLUNA_SOLICITANTE); jTable1_ANDAMENTO2.setValueAt(numFicha, t, COLUNA_NUMFICHA); t++; } }

Criado 17 de dezembro de 2009
Ultima resposta 18 de dez. de 2009
Respostas 6
Participantes 4