Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo ich habe eine JTable die mit

(Deklaration ist public JTable tabelle;)

tabelle = new JTable(rows, columnNames);

erzeugt wird. Diese Tabelle enthält Daten die aus einem SQL-Result geholt werden und reihenweise angefügt werden.

Nun ist die Tabelle gefüllt mit Datensätzen aus der Datenbank. Jetzt ändere ich Daten in meiner GUI, übergebe die an die Datenbank per SQL Insert und rufe die Methode

datensatzEinlesen()

wieder auf. Die Methode ist die selbe wie ich sie auch für den erstenmaligen Aufruf der JTable benutzt habe.

Nun dachte ich, durch erneuten Aufruf dieser Methode liest er erneut die Datensätze aus der Datenbank ein und "überschreibt" einfach die JTable, die bereits angezeigt wird. Leider muss da ein denkfehler vorliegen, denn das klappt NICHT!

Wo liegt mein Denkfehler oder wie kann ich es erreichen das nach der Datenbank-Aktion ein Update der Ansicht erfolt und die neuen Einträge in der Datenbank auch erscheinen.

Ich habe den Quelltext mal angehängt, vielleicht kann mir jmd von euch in der Sache ein wenig weiterhelfen.

public void datensatzEinlesen() {

try {

// SQL-Select-Befehl

sql =

"SELECT a.ID,"

+ " c.PRODUKT,"

+ " b.THEMENBEREICH,"

+ " a.BESCHREIBUNG FROM IDEE a,"

+ " themenbereich b,"

+ " produkte c WHERE a.themenbereich=b.ID"

+ " and a.produkt=c.id ORDER BY a.ID";

stmt = con.createStatement();

result = stmt.executeQuery(sql);

ResultSetMetaData metaData = result.getMetaData();

int numberOfColumns = metaData.getColumnCount();

Vector columnNames = new Vector();

columnNames.addElement("ID");

columnNames.addElement("Produkt");

columnNames.addElement("Themenbereich");

columnNames.addElement("Beschreibung");

//Alle Reihen einlesen

Vector rows = new Vector();

while (result.next()) {

Vector newRow = new Vector();

for (int i = 1; i <= metaData.getColumnCount(); i++) {

newRow.addElement(result.getObject(i));

}

rows.addElement(newRow);

}

result.close();

stmt.close();

tabelle_data = new JTable(rows, columnNames);

tabelle_data.getTableHeader().setReorderingAllowed(false);

tabelle_data.getTableHeader().setResizingAllowed(false);

} catch (SQLException e) {

JOptionPane.showMessageDialog(

null,

"Fehler beim Einlesen der Datensätze",

"Hauptmenu - Ratioliste einlesen",

JOptionPane.INFORMATION_MESSAGE);

}

JScrollPane jsp = new JScrollPane(tabelle_data);

jsp.setBounds(5, 550, 650, 100);

pan.add(jsp);

}

Geschrieben

Hi Erdbeere...

Ich glaube ich habe das etwas kompliziert erklärt

Die JTable wird allein durch einen SQL gefüllt.

Es werden ja keine Änderungen direkt in der Tabelle geschrieben sondern nur als "Hilfsmittel" zur Anzeige gebraucht.

FireTableDataChanged ruft doch nur eine andere Methode auf, wenn ich eine Zelle in der Tabelle per Hand geändert habe oder?

Das ist es ja nicht was ich brauche...

Hast du vielleicht noch einen Alternativvorschlag?

Geschrieben

Hi!

Danke für den Link, aber ich komme einfach so nicht weiter, vielleicht denke ich falsch. Ich habe das Beispiel schon so weit abgeändert, dass es eigentlich funktionieren sollte. Aebr leider tut es das nicht. Ich weiß nicht, wie ich meine Daten aus der SQL Abfrage in die Tabelle bekomme. Im Moment mache ich das über einen Vector, in dem Beispiel geschiet das ja statisch über ein Object.

vielleicht kann mir jmd da einen konkreten Lösungsansatz geben das wäre super! ICh hänge mit meiner Arbeit momentan nur noch an dieser einzigen Sache!

  • 4 Jahre später...
Geschrieben

mit fireTableDataChanged() wird der JTable bescheid gegeben, dass sich das Array (das im Hintergrund arbeitet) sich geändert hat...

ob es jetzt manuell geändert wurde oder ob eine Methode dieses Array geändert hat ist eigentlich egal...

du brauchst halt eine aktualisieren Knopf, der die Verbindung zur SQL Datenbank aufbaut und dein Hintergrundarray aktualisiert...

und ein Speichern knopf, der die Änderungen der JTable dan in die SQL Datenbank schreibt...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...