" Column Index out of range, 6 > 5."

didi577

Bekanntes Mitglied
Hi,

ich habe mir mit Mühe und Not eine JTable gebaut die aus Daten einer MySQL Tabelle gefüllt wird. Beim Ausführen wirft das Pogramm eine Exception " Column Index out of range, 6 > 5.". ...und zwar so oft wie Zeilen in der MySQL Tabelle sind. Ich will aus dieser MySQL Tabelle die ersten 5 Spalten in die JTable importieren. Die JTable hat auch 5 Spalten

hier die Abfrage der MySQL:
Java:
  public String [][] holeFragen() {
     int columnindex = 0;
     int rowcounter = 0;
     
     String [][] returnds = null;
     ArrayList<String> row = new ArrayList<>();
     
try {
       
   Statement st = (Statement) con.createStatement();
   ResultSet rs = st.executeQuery("select fragen_id, kurs, ort, dozent, datum from fragen");
   while(rs.next()) {
     
     try {
       columnindex = 0;
       for (int i = 1;; i++) {
         //System.out.println(rs.getString(i) + "\t");
         row .add(rs.getString(i));
         columnindex++;
       }
     } catch (Exception e) {
       System.out.println(e);
     }
   }
       
       
     } catch (SQLException e) {
       e.printStackTrace();
     }
   returnds = new String [row.size() / columnindex][columnindex];
   for (int i = 0; i < returnds.length; i++) {
     for (int j = 0; j < returnds[i].length; j++) {
       returnds[i][j] = row.get(rowcounter);
     }
   }
   return returnds;
   }
hier baue ich die JTable:
Java:
  diaLoeschen = new JDialog(diaLoeschen, true);
       diaLoeschen.setTitle("Einträge löschen");
       diaLoeschen.setSize(600, 400);
       diaLoeschen.setResizable(false);
       tblLoeschen = new JTable();
       
       tblm = new DefaultTableModel(mysql.holeFragen(), new String [] {"fragen_id", "kurs", "ort", "dozent", "datum"});
       tblLoeschen.setModel(tblm);
       
       scrollTabelle = new JScrollPane(tblLoeschen);
       scrollTabelle.setBounds(170, 50, 310, 390);
       btnLoeschen = new JButton("Löschen");
       
       diaLoeschen.getContentPane().setLayout(new BorderLayout(5,5));
       diaLoeschen.getContentPane().add(scrollTabelle, BorderLayout.CENTER);
       diaLoeschen.getContentPane().add(BorderLayout.PAGE_END,btnLoeschen);
             
       diaLoeschen.setVisible(true);
       pack();

in der JTable wird in jedem Feld die fragen_ID des ersten MySQL Datensatzes angezeigt

Kann mir bitte jemand helfen das Problem zu lösen?
 
Wo wirft er denn die Exception?
(Also in welcher Zeile? / Stacktrace?)

Ich tippe mal drauf, dass dein Problem hier liegt:
Code:
      for (int i = 1;; i++) {
         //System.out.println(rs.getString(i) + "\t");
         row .add(rs.getString(i));
         columnindex++;
       }
Du hast keine Abbruchbedingung für deine Schleife.
rs.getString(i) muss somit irgendwann zu groß sein und zu einer Exception führen.
Die du dann aber ja später fängst. Deshalb weis ich jetzt nicht, ob du diese Exception meinst, oder noch ne andere?
 
Zuletzt bearbeitet:
ok, Danke für den Tipp

die Tabelle hat sehr viele Spalten, ich möchte aber nur die ersten 5 Spalten ausgeben da diese Informationen genügen, die Anzahl der Zeilen ist variabel

kann ich das ganze dann mit einer Abbruchbedingung lösen?
 
die Tabelle hat sehr viele Spalten, ich möchte aber nur die ersten 5 Spalten ausgeben da diese Informationen genügen, die Anzahl der Zeilen ist variabel

kann ich das ganze dann mit einer Abbruchbedingung lösen?
Ja natürlich kannst du es mit einer Abbruchbedingung lösen. Es ist doch egal wieviele Spalten die Tabelle hat, es geht um das ResultSet.
Hast du dir den Link genau angeschaut? Hast du dir auch die Doku zum ResultSet bzw. ResultSetMetadata angeschaut?
 
meine Englisch ist nicht das Beste...also eine weitere Baustelle 😉

habe jetzt ne Abbrucbedingung drin "i <= 5", es kommen keine Fehler mehr, allerdings stehen immer noch keine richtigen Werte in der JTable, überall die 368 also die ID des ersten Eintrags
 
ich habe jetzt auch deinem Link folgend gearbeitet mit ResultSetMetaData und i <= columnsNumber etc. ,

Resultat wie bei "i <= 5" aber keine Daten in der JTable
 
ich habe jetzt auch deinem Link folgend gearbeitet mit ResultSetMetaData und i <= columnsNumber etc. ,
Gut der Vorteil ist wenn du mal das SELECT Statement anpasst, du die Schleife nicht auch anpassen musst 😉

Resultat wie bei "i <= 5" aber keine Daten in der JTable
Überhaupt keine Daten oder wie im 1.Post geschrieben überall nur die selben Daten?

Das überalle das gleiche angezeigt wird hat einen einfachen Grund .. du weist jedem Index deines 2d Arrays denselben Wert zu.
Die Variable rowcounter wird nie erhöht, somit holst du immer nur den 1.String aus der Liste.

Abgesehen davon braucht es die Variable rowcounter gar nicht. Du kannst dir die passenden Position in der Liste über "i", "j" und die Länge einer Zeile ausrechnen 😉
 

Neue Themen


Zurück
Oben