ich bin neu hier Und habe die folgende Frage: Ich versuche Daten aus einer Oracle-Datenbank per SQL auszulesen und sie in einem kleinen Java-Programm zu verarbeiten (einmal einfach nur in tabellarischer Form und einmal in Form einer Grafik darzustellen).
Die Abfrage klappt problemlos, die Daten werden auch wunderbar ausgelesen, nur weiß ich leider nicht, wie ich sie in mein data-Objekt für die Tabelle reinbekomme
Mein Ansatz bis jetzt:
Java:
// Datenbankabfrage:Connection conn =Verbindung.getConnection();if(conn !=null){try{Statement stmt = conn.createStatement();String query ="SELECT ... FROM ... WHERE ..."// hier klappt es noch primaSystem.out.println(query);ResultSet erg = stmt.executeQuery(query);// Aufbau der Tabelle aus der vorhergehenden Abfragewhile(erg.next()){System.out.println(erg.getString("a")+" "+ erg.getString("b")+" "+ erg.getString("c")+" "+ erg.getString("d"));System.out.println(erg.getString("a"));String[][] data =newString[][]{{erg.getString("a")},{erg.getString("b"), erg.getString("c")}};// hier ist vermutlich der Fehler...}JTable table =newJTable( data, title );
rahmen.add(newJScrollPane(table));
rahmen.pack();
rahmen.setVisible(true);
stmt.close();}catch(SQLException sqle){System.out.println(sqle.toString());}}elseJOptionPane.showMessageDialog(null,"Keine Verbindung mit der Datenbank moeglich!");}};
Ein weiteres Problem besteht darin, dass in der Zeile "JTable table = new JTable( data, title );" Eclipse meldet: "Data cannot be resolved to a variable", obwohl die Variable in der gleichen Methode liegt.
Für den einen oder anderen Hinweis wäre ich sehr dankbar
Viele Grüße und ein schönes Wochenende Euch allen!
Stimmt, ich war gestern Abend wohl etwas verwirrt
Ich frage jetzt etwas konrekter: Ich bin zwischenzeitlich auf diesen FAQ-Thread gestoßen. Was ich haben will, ist die simpelste Variante 1 (2d-Array) - und wenn ich das Array, wie in dem Beispiel gezeigt, per Hand im Code eintrage, klappt das auch prima. Mein Problem besteht nur darin, dass ich nicht weiß, wie ich die entsprechende Schleife fomuliere, die die Daten aus der SQL-Abfrage ausliest. Könntest Du mir einen Ansatz dazu geben?
das mit dem Array würde ich gleich vergessen. Schreibe Dir eine Datenklasse, deren Objekte Du dann in Deine JTable anzeigst. Die Datenobjekte befüllst Du aus dem ResultSet und fügst sie zu einer Liste an.
Im Prinzip handelt es sich bei meiner Aufgabe um eine ganz rudimentäre Applikation, die lediglich die Inhalte aus der Datenbank herausholt und sie einmal statisch in die Tabelle schreibt - weiter nichts.
Insofern dachte ich eben an die einfache Möglichkeit... Aber ich habe nun tatsächlich Probleme damit, das zweidimensionale Array zu füllen. Bin eben noch Anfänger in Sachen Java :autsch:
Folgender Code bereitet mir nun Schwierigkeiten:
Java:
int anzahlDerZeilen =0;if(ergCount.next()){
anzahlDerZeilen = ergCount.getInt(1);}
ergCount.close();System.out.println(anzahlDerZeilen);// Aufbau der Tabelle aus der vorhergehenden AbfrageString[][] data =newString[anzahlDerZeilen][4];String[] title =newString[]{"A","B","C","D"};while(erg.next()){System.out.println(erg.getString("a")+" "+ erg.getString("b")+" "+ erg.getString("c")+" "+ erg.getString("d"));// Array fuellen:for(int i=0; i<data.length;++i){System.out.println("i: "+i);for(int j=0; j<data[i].length;++j){System.out.println("j: "+j);
data[i][0]= erg.getString("a");
data[i][1]= erg.getString("b");
data[i][2]= erg.getString("c");
data[i][3]= erg.getString("d");}}}
Es läuft im Grunde schon fast richtig, nur werden leider alle Werte in der Tabelle vom letzten Wert überschrieben... Könnte mir jemand einen Hinweis auf meinen Denkfehler geben? ???:L
scheint du hast dich in den geschachtelen Schleifen verfahren.
in Zeile 17 gehst du deine Abfrage-Results durch
innerhalb dieser Schleife läufst du in Zeile 22 jeweils dein komplettes Array ab und trägst somit jeweils den aktuellen Satz aus der while Schleife in dein Array ein. Somit kann das Array immer nur die Daten des letzten while enthalten.
die for Schleife in Zeile 24 kannste dir eigentlich sparen, da du innerhalb dieser Schleife die Zellen eh hart codierst (data[0] -> data[3] einträgst. Solls abhängig der Zellenanzahl innerhalb der Schleife passieren wäre eher data[j] angebracht.
Vielleicht hifts ja deinen Gedankenknoten zu lösen
mfg
gafktor
Vom Prinzip ist die Umsetzung mit einem TableModel auch keine Magie. Nimmer dir Zeit, dann verstehst du auch was gemacht werden muss und welchen Sinn es hat.