Zum Inhalt springen

derflix

Mitglieder
  • Gesamte Inhalte

    32
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von derflix

  1. derflix

    Mein Programm hängt

    Wie kann man denn bitte zu viel schreiben?? Meinst Du ich sollte die Anzahl meiner Beiträge reduzieren oder die länge meiner Beiträge?
  2. derflix

    Mein Programm hängt

    Hups, da haben wir wohl parallel geantwortet!
  3. derflix

    Mein Programm hängt

    Also ich finde Dein Code ist immernoch nicht übersichtlicher geworden ;-) Warum verteilst Du denn alles so aufwendig? Das geht doch auch wesentlich kompakter. Aber gut, mir scheint dass hier ein Fehler steckt: Vector datensatz = new Vector(); Vector daten = new Vector(); while (rset.next()) { for (int i = 1; i <= cols; i++) { datensatz.add(rset.getString(i)); } daten.add(datensatz); } [/PHP] Der Vektor daten soll in diesem Fall die Zeilen aufnehmen, der Vektor datensatz jeweils nur eine Zeile. Wenn Du das ganze so schreibst wie aus meinem Beispiel, müsste es so aussehen: [PHP] Vector daten = new Vector(); while (rset.next()) { Vector datensatz = new Vector(); for (int i = 1; i <= cols; i++) { datensatz.add(rset.getString(i)); } daten.add(datensatz); } Ich habe hier lediglich die Erzeugung des Vektors datensatz in die Schleife geschoben! Der Grund, warum es so funktioniert ist ganz einfach: beim jedem Schleifendurchlauf wird ein neuer Vektor datensatz erzeugt, so dass bei n Zeilen auch n Vektoren datensatz existieren. Bei deiner Deklaration wird nur ein Vektor erzeugt und die Daten einfach immer angehängt. Aus diesem Grund erscheint die selbe Zeile immer wieder! Gruß derflix
  4. derflix

    Mein Programm hängt

    Eigentlich ist es garnicht notwendig, die Anzahl der Zeilen zu ermitteln. Es langt so lange mit ResultSet.next() die Daten auszulesen bis keine mehr vorhanden sind. Da ich (sorry) Durch Deinen Code langsam nicht mehr so ganz durchblicke, hab ich das ganze nochmal komplett neu geschrieben (mit MySQL als Datenbank). Anstelle eines Object-Arrays habe ich Vectoren verwendet. Der Vorteil dabei ist, dass die Anzahl der Zeilen/Spalten vorher nicht feststehen muss und dass Du die Vektoren direkt an den Konstruktor von JTable übergeben kannst. Das Programm funktioniert auch dann, wenn die Datenbankabfrage 0 Zeilen liefert. Natürlich ist das Beispiel so nicht perfekt, für den täglichen Einsatz würde sich die Erstellung einer von JTable abgeleiteten Klasse empfehlen. import javax.swing.*; import java.sql.*; import java.awt.event.*; import java.util.*; class TableTest extends JFrame { public TableTest() throws Exception { this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); // MySQL-Treiber laden Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Connection con = DriverManager.getConnection("jdbc:mysql://hostname:3306/database?user=root&password=**************"); Statement abfrage = con.createStatement(); Vector Daten = new Vector(); Vector Spaltennamen = new Vector(); try { ResultSet ergebnis = abfrage.executeQuery("SELECT ..."); ResultSetMetaData tabellenstruktur = ergebnis.getMetaData(); int spalten = tabellenstruktur.getColumnCount(); // die Spaltennamen aus der Datenbank verwenden for (int a=1; a<=spalten; a++) Spaltennamen.add(tabellenstruktur.getColumnName(a)); while (ergebnis.next()) { Vector einezeile = new Vector(); for (int a=1; a<=spalten; a++) { einezeile.add(ergebnis.getString(a)); } Daten.add(einezeile); } } catch (SQLException e) { } // Tabelle erzeugen und anzeigen JTable tabelle = new JTable(Daten,Spaltennamen); this.getContentPane().add(new JScrollPane(tabelle)); } public static void main(String[] args) { try { TableTest fenster = new TableTest(); fenster.setSize(200,200); fenster.setVisible(true); } catch (Exception e) { } } } [/PHP] Hoffe das hilft dir weiter. Falls du eine gute Klasse erstellst um Tabellen mit dem Ergebnis beliebiger SQL-Abfragen zu füllen, würde ich mich freuen wenn du die hier posten könntest. derflix
  5. derflix

    Mein Programm hängt

    Auf die Schnelle würde ich Dir mal empfehlen zu prüfen, ob rset.last(); int rows = rset.getRow(); wirklich die Anzahl der Zeilen liefert! Gerade beim Einsatz von MySQL habe ich die Erfahrung gemacht, dass dieser Trick nicht funktioniert und die Variable rows anschliessend den Wert 0 hat. Wenn dem so ist, dürfte Dein Programm in folgender Zeile abstürzen: o[p] = rset.getString(p + 1); Denn für den Fall dass rows den Wert 0 hat, was ja auch unter normalen Umständen vorkommen kann, hat dein Array 0 die Ausmasse [0][cols], deine Schleife wird aber auch für rows=0 einmal durchlaufen, weswegen es bei der Zuweisung an o[p] in jedem Fall zu einem Fehler kommen müsste.
  6. derflix

    Mein Programm hängt

    Also auf die Schnelle ist mir folgende Zeile aufgefallen, die zunächst einmal zu einem Programmabbruch führen wird: this.setLayout(new BorderLayout()); wenn Du daraus this.getContentPane().setLayout(new BorderLayout()); machst, sollte es funktionieren. Deine Methode getJTable aus der Klasse Tools wird übrigens nur funktionieren, wenn die Datenbankabfrage mehr als 0 Ergebnisse liefert! Aber auch dann ist ein stabiler Ablauf nicht gesichert, denn je nach verwendeter Datenbank und Abfrage kann rset.last() und rset.getRow() nicht das erwartete Ergebnis liefern. Es ist besser mit rset.next() die Ergebnisse so lange zu durchlaufen bis eben keine weitere Zeile vorhanden ist. Hoffe das hilft schonmal. Viel Erfolg, F.
  7. Hallo, ich vermute mal, dass du unter Beziehung zueinander verstehst, dass ID und Name innerhalb des Programms miteinander verbunden sind, also z.B. in einem gemeinsamen Objekt untergebracht sind. Die einfachste Lösung ist meineserachtens ein neues Objekt zu erstellen, welches Username und ID enthält! Dieses Objekt kann dann in die JComboBox eingefügt werden. Zum Beispiel so: class User { private String username; private int userid; public User(String uname, int uid) { username = uname; userid = uid; } public String toString() { return username; } } JComboBox combo; combo.addItem(new User("Frank",1)); Die Methode toString() muss überschrieben werden damit der Username in der Combobox angezeigt wird. Ich hoffe das hat Dir weitergeholfen.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...