JDBC TableModel für eine JTable in Java?
Will ich die Anzeige einer Datenbank-Tabelle als eine JTable. Ich habe noch nie verwendet, JTable, bevor ich gegoogelt JTable und TableModel.
Mit googeln bin ich in der Lage zu schreiben, meine eigenen TableModel die Daten anzuzeigen, die gespeichert sind in
Object[][] data;
Nun, ich will mich zeigen, meine Datenbank-Tabelle Daten in die JTable. Gesucht, dass ich auch und habe auch schon eine Idee, aber immer noch verwirrt, was geht, wo in der Umsetzung Klasse von AbstractTableModel.
Folgende code ist der code der custom TableModel.
public abstract class AbstractPOLDATTableModel extends AbstractTableModel {
protected boolean DEBUG = false;
private String[] columnNames;
private Object[][] data;
protected AbstractPOLDATTableModel(String[] columnNames, Object[][] data) {
this.columnNames = columnNames;
this.data = data;
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
@Override
public String getColumnName(int col) {
return columnNames[col];
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
@Override
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
@Override
public boolean isCellEditable(int row, int col) {
if (col < 2) {
return false;
} else {
return true;
}
}
@Override
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}
data[row][col] = value;
fireTableCellUpdated(row, col);
if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}
private void printDebugData() {
int numRows = getRowCount();
int numCols = getColumnCount();
for (int i=0; i < numRows; i++) {
System.out.print(" row " + i + ":");
for (int j=0; j < numCols; j++) {
System.out.print(" " + data[i][j]);
}
System.out.println();
}
System.out.println("--------------------------");
}
}
Nun, so ändern Sie den obigen code so, dass mein JTable können haben die folgenden Besonderheiten:
- Es zeigt die Daten aus der Datenbank
- Der Benutzer Bearbeiten kann die Tabelle direkt und wenn er klickt auf einen button "speichern" werden die änderungen in die Datenbank Daten
- Benutzer einfügen können Daten direkt.
- Benutzer können Daten löschen direkt.
Sie erhalten funktionierende Beispiele in deinem letzten posting.
Sie fragte fast die gleiche Frage von gestern: stackoverflow.com/questions/2192764/...
Yatendra - werfen Sie einen Blick auf mein Beispiel von gestern, auf die Frage und sagen Sie mir, wo Sie haben, stecken zu bleiben, und ich werde versuchen, Ihnen einige Hinweise.
Dein Beispiel war Klasse und jetzt habe ich implementiert eine JTable, die Darstellung von Daten aus der Datenbank. Bis jetzt ist die JTable ist nur zu zeigen, den Daten. Jetzt möchte ich, dass der Benutzer Bearbeiten kann die Tabelle direkt aus JTable und dann die änderungen in die Datenbank. Wie kann ich das implementieren?
Sie fragte fast die gleiche Frage von gestern: stackoverflow.com/questions/2192764/...
Yatendra - werfen Sie einen Blick auf mein Beispiel von gestern, auf die Frage und sagen Sie mir, wo Sie haben, stecken zu bleiben, und ich werde versuchen, Ihnen einige Hinweise.
Dein Beispiel war Klasse und jetzt habe ich implementiert eine JTable, die Darstellung von Daten aus der Datenbank. Bis jetzt ist die JTable ist nur zu zeigen, den Daten. Jetzt möchte ich, dass der Benutzer Bearbeiten kann die Tabelle direkt aus JTable und dann die änderungen in die Datenbank. Wie kann ich das implementieren?
InformationsquelleAutor Yatendra Goel | 2010-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich gehe davon haben Sie umgesetzt 1 nach, was Adamski vorgeschlagen, in Ihrem vorherigen Frage. Auch, wie vorgeschlagen von Sanoj, änderung über irgendeine Art von Liste, um Ihre Daten zu speichern.
Unterstützen, 2-4, müssen Sie sicherstellen, dass die Daten, die Sie ziehen aus der Datenbank kommt, nur aus einer Tabelle und beinhaltet keine abgeleiteten Daten (zB. Aggregationen, spalte1 + spalte2). Sie müssen behalten Sie Ihre
where
- Klausel, wenn Sie beabsichtigen, lassen Sie die Benutzer filtern von Zeilen.In jeder Zeile, speichern Sie eine weitere Zeile (nennen wir es updatedRow) , stellt die updates, die der Benutzer vorgenommen hat, mit der GUI. Sobald ein update gemacht wird, um die Zeile, die dieses Feld muss ausgefüllt werden durch eine neue Zeile mit den aktualisierten Daten . Wenn "Speichern" geklickt haben, führen Sie update-Abfragen für alle Zeilen mit nicht-null-updatedRow, die Aktualisierung der Datenbank mit den Daten in updatedRow, die nicht mit denen von der original-Reihe (nicht aktualisieren, wenn der Benutzer ändert Daten zurück, wie es ursprünglich war). Möglicherweise müssen Sie auch ein weiteres "Rückgängig " Updates" - button, füllt die Tabelle mit den original-Daten für alle Zeilen mit nicht-null-updatedRow.
Ich würde empfehlen, dass Sie speichern zusätzliche Metadaten in die Felder der primary key und verhindern, dass diese nicht mehr verändert werden, als updates solcher Spalten kann teuer werden (da Sie vermutlich indiziert und kann einige RI-constraints im Anhang). Dies sollte reflektiert werden in der GUI durch solche Spalten nicht editierbar. Die
where
- Klausel in die updates würden nur diese Felder, anstatt alle Felder (Sie müssen noch andere Filter, die Ihre Benutzer-set in 1).Ich würde vorschlagen, ein zwei-Schritt Prozess. Startet der Benutzer durch klicken auf eine Schaltfläche fügt eine Zeile in die Tabelle ein. Nach Eingabe der Daten klickt der Benutzer auf eine andere Schaltfläche einfügen in die Datenbank (oder kombinieren Sie diese Funktion mit updates in der "speichern" - button). Sie müssen es erlauben, primary key-Felder, die editierbar sein für neu eingefügte Zeilen, wenn die primary key-Spalten sind nicht irgendeine automatisch generierte ID.
Zu unterschiedlich sind die Zeilen sind bereits in der Datenbank und welche nicht, würde ich vorschlagen, speichern eine Liste von neu eingefügten Zeilen.
Wenn Sie lassen Sie die Benutzer, wählen Sie nur bestimmte Spalten in der Tabelle angezeigt werden, müssen Sie bestimmen, wie Sie sich mit den Spalten, die nicht angezeigt werden (zB. lassen Sie die Datenbank legen Sie eine Standard -, Auffüllen mit automatisch generierten ID).
Wahrscheinlich am besten, um dies zu implementieren, indem Sie eine checkbox mit jeder Zeile, dann, wenn der "Löschen" - Schaltfläche geklickt wird, ruft SQL löschen jede Zeile überprüft mithilfe der filter aus 1 und Primärschlüssel-Metadaten erwähnt in 2, als auch, um es zu entfernen aus der Tabelle.
Allgemeine überlegungen:
Den gleichen setValueAt-Methode wird für beide verwendet werden, aktualisiert und eingefügte Zeilen, aber Sie wollen anders Verhalten. Sie möchten updatedRow für updates, nicht aber beim Bearbeiten der Zeilen, die Sie gerade einfügen.
Wie Sie Fehler behandeln, wie Einschränkungen nicht eingehalten werden oder Ungültiger Eingabe (z.B. 'abcde' in einem numerischen Feld)?
SQL-injection.
InformationsquelleAutor lins314159