Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [java] ArrayIndexOutOfBoundsException: 4 >= 4

    Ciao,


    ???

    catch: java.lang.ArrayIndexOutOfBoundsException: 4 >= 4


    non comprendo il perchè....

    codice:
                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                 String connectionUrl = "jdbc:sqlserver://ced-sql:1433;" + "databaseName=magazzinoricambi;user=sa;password=12345678;"; 
                 Connection con = DriverManager.getConnection(connectionUrl);
                 st=con.createStatement();
                 ResultSet r=st.executeQuery("SELECT * FROM dbo.tblMagazzinoRicambi");     
                 int riga=0;            
                 aggiungi_debug(jTextPane1,"Inizio. RiempiTabella().","Verdana",Color.BLACK,Color.CYAN,10,false);            
                 while(r.next())
                    {
                       for(int i=0; i<contaColonne(); i++)
                       {    
                            aggiungi_debug(jTextPane1,"Contatore riga: "+String.valueOf(riga)+". Contatore i: "+String.valueOf(i)+" --> Contiene il dato: "+String.valueOf(r.getString(i+1)),"Verdana",Color.BLACK,Color.GREEN,10,false);            
                            jTable1.setValueAt(r.getString(i+1),riga,i);                        
                       }
                       riga++;
                    }
                aggiungi_debug(jTextPane1,"Fine. RiempiTabella().","Verdana",Color.BLACK,Color.CYAN,10,false);            
                r.close();

    ha funzionato bene, con 3 righe sulla tabella.... riempite direttamente dal manager SQL2005.
    Poi ho scritto il metodo per aggiungere altre informazioni.. e quindi aggiunte altre 2 righe (totale 5 righe...). Mi legge e scrive su una jTable le prime 4 e poi mi da quell errore...
    Guardo la tabella su SQL2005.. e mi pare apposto.. senza errori o difetti..


  2. #2
    di solito nei while è meglio mettere la condizione
    Codice PHP:
    while(r.hasNext()) 
    poi nn so se il problema sta lì

    ah beh, e poi nel ciclo fare r.next()

  3. #3
    non ho hasNext().... ???

    mi dice che non trova il simbolo... ma ho importato java.sql.*; e anche java.util.*;

  4. #4
    ho un pò cambiato il codice... ora si ferma subito dopo la prima riga della tabella riempita.

    Codice PHP:
                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
                 
    String connectionUrl "jdbc:sqlserver://ced-sql:1433;" "databaseName=magazzinoricambi;user=sa;password=12345678;"
                 
    Connection con DriverManager.getConnection(connectionUrl);
                 
    Statement st=con.createStatement();
                 
    ResultSet r=st.executeQuery("SELECT * FROM dbo.tblMagazzinoRicambi");     
                 
    ResultSetMetaData meta=r.getMetaData();
                 
    int numColonne meta.getColumnCount();
                 
    int riga=0;            
                 
    aggiungi_debug(jTextPane1,"Inizio. RiempiTabella().","Verdana",Color.BLACK,Color.CYAN,10,false);
                 
    aggiungi_debug(jTextPane1,"numColonne: "+numColonne+". ","Verdana",Color.BLACK,Color.CYAN,10,false);            
                 while(
    r.next())
                    {
                       for(
    int i=1i<=numColonnei++)
                       {    
                            
    aggiungi_debug(jTextPane1,"Contatore riga: "+String.valueOf(riga)+". Contatore i: "+String.valueOf(i)+" --> Contiene il dato: "+String.valueOf(r.getString(i)),"Verdana",Color.BLACK,Color.GREEN,10,false);            
                            
    jTable1.setValueAt(r.getString(i),riga,i);
                       }
                       
    riga++;
                    }
                
    aggiungi_debug(jTextPane1,"Fine. RiempiTabella().","Verdana",Color.BLACK,Color.CYAN,10,false);            
                
    r.close(); 

  5. #5
    ops...

    Codice PHP:
                            jTable1.setValueAt(r.getString(i),riga,i); 
    modificato

    Codice PHP:
                            jTable1.setValueAt(r.getString(i),riga,i-1); 
    ecco perchè mi sforava la riga... saltava fuori dalla tabella.



    Continuo però ad avere lo stesso errore

    Codice PHP:
    java.lang.ArrayIndexOutOfBoundsException>= 
    alla quarta riga... ma sembra leggere il primo dato.. sul debug me lo scrive.. l'ID 5... poi catch errore.

  6. #6
    caspio!!

    ora ho capito... la jTable disegnata con NetBeans è di 4 RIGHE...!!! ecco perchè sebbene la tabella sul database contiene 5 o 6 righe.. il programma mi da errore.
    Supera il vincolo di 4 righe predefinito sulla jTable.


    Ma allora... come faccio a far capire alla JTable di essere... modulabile.. anzi scrollabile ?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cagnaluia
    Ma allora... come faccio a far capire alla JTable di essere... modulabile.. anzi scrollabile ?
    Innanzitutto per questo tipo di cose in genere si definisce un apposito "table model". Cioè non si fanno dei table.setValueAt(). È il table model che si deve occupare di prelevare i dati e poi di "esporli" alla JTable (indicando quante righe/colonne ci sono, di quali tipi ecc...).

    Creating a Table Model
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    ah



    leggo

  9. #9
    non so come generare il tablemodel personalizzato legando le informazioni della tabella del database...

    :berto:

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da cagnaluia
    non so come generare il tablemodel personalizzato legando le informazioni della tabella del database...
    Quando si tratta di mettere insieme database e un table model la questione di fondo è anche un'altra: stabilire quanto rendere "generico" il table model.

    Il caso più generico potrebbe essere quello di poter istanziare il table model passandogli semplicemente una Connection e una stringa di query. Il table model si occuperà di tutto, cioè di fare la/e query, ottenere il ResultSet, ottenere i metadati del ResultSet (per sapere quante colonne ci sono e di che tipo), determinare il numero di righe ed esporre il tutto al di fuori tramite i vari metodi da implementare.

    Il problema è appunto quello di mettere insieme tutto questo, cercando di realizzare una cosa che sia un pochino efficiente. Ma poi si possono anche fare dei table model specifici per una certa query, ovviamente.

    Comunque ti è chiaro come funziona un table model? Il table model non sa assolutamente nulla su come/dove verranno visualizzati i dati. L'unica cosa che sa è come gestire/mantenere i dati ed esporli al di fuori tramite gli appositi metodi.
    È la JTable che si occuperà di chiedere al table model le varie informazioni: senti table model, quante righe hai (getRowCount())? Quante colonne hai (getColumnCount())? Dammi il dato alla riga y colonna x (getValueAt())? E via di seguito ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.