2017-04-25 3 views
0

Ich habe ein Programm, das inf aus einer MySQL-Tabelle verwendet, um Zeilen in einem JTable zu erstellen. Ich benutze eine automatische Inkrementierung ID, aber immer wenn ich eine Zeile aus der Datenbank lösche (und dafür die JTable) und dann eine neue hinzufüge, habe ich zwischen den ID's einen Haken.MySQL-IDs mit JTable-Zeilen synchronisieren

Zum Beispiel speichert meine MySQL-Tabelle jetzt 3 Zeilen mit ID 1,2 und 4, die in der JTable als Zeilen mit Zeilennummer 1,2 und 3 gespeichert sind. Das vermasselt wirklich meine Logik.

Daher möchte ich wissen, ob es eine Möglichkeit gibt, es so zu machen, dass jedes Mal, wenn ich eine Zeile aus dieser Tabelle lösche, alle IDs unter ID aktualisiert werden.

Ich hatte gehofft, dass dies mit einer Abfrage erreicht werden könnte, oder?

+1

'Ich hatte gehofft, dies mit einer Abfrage erreicht werden konnte, kann es? '- Ist das nicht der automatisch inkrementierende ID-Teil der Tabelle? Können Sie diese ID nicht einfach von der SQL-Abfrage zurückgeben und diesen Wert dann in der JTable anzeigen? Der Schlüssel zu einer Tabelle ist, dass sie sich im Laufe der Zeit nicht ändert. Das Zurücksetzen der ID beim Löschen einer Zeile ist also nicht sinnvoll. – camickr

+0

Nein, weil ich das Tabellenmodell verwende, das automatisch die Zeile mit dieser ID angibt. Wenn beispielsweise ein benutzerdefinierter Renderer verwendet wird, werden die Zeilen so gezählt. – BRHSM

+0

Das war mein Punkt. Reihen Sie die Zeilen nicht automatisch ab. Die ID-Nummer sollte sich NICHT ändern. Verwenden Sie die ID aus der SQL-Tabelle, um sie in der JTable anzuzeigen. – camickr

Antwort

1

auch wenn die Frage nicht so viel Sinn macht, können Sie eine Abfrage jedes Mal ausführen, wenn Sie eine Zeile löschen. Das einzige, was Sie wissen müssen, ist, welche ID Sie gelöscht haben. dann führen Sie dies:

set @a=id-1 
go 
update tablename set [email protected]:[email protected]+1 

id-1 bedeutet, dass, wenn Sie id 5 Sie es sind jetzt 5,6,7 bis 4 so Ihre Reihe 6,7,8 .. Set löschen ...

0

Sie hinzufügen können eine Spalte von mysqlID in Ihrer Tablemodel wie diese Abfrage

String [] columnNames = {"Sno ","mysql ID","Name" }; 
DefaultTableModel dtm = new DefaultTableModel(columnNames ,0); 

Lauf und Spalte „mysql-ID“ mit der ID in Ihrem DB bevölkern, und wenn Sie diese Spalte ausblenden möchten Sie es aus der Tabelle entfernen können, geben Sie diese Code im Konstruktor

tableName.removeColumn(tableName.getColumnModel().getColumn(1));

wenn Sie id einer bestimmten Zeile in jtable möchten, können Sie es von seinem (Tabel) Modell erhalten

mysqlLID = (int)dtm.getValueAt(tableName.getSelectedRow(), 1);

Verwandte Themen