Guten Tag
mit folgendem Code kann ich EINE Spalte einer JTable (mit model) sortieren.
Ausganslage:
Lade aus Datenbank (mySql) mit "SELECT datum, betrag FROM myDB ORDER BY datum, betrag DESC;"
Das funktioniert in der korrekten Sortierung!
Jetzt füge ich eine Zeile (INSERT INTO myDB wurde mit spez. Verschlüsselung ausgeführt) der Tabelle hinzu. Funktioniert auch, aber
sie steht immer am Ende der Tabelle (ohne einsortiert zu werden).
Wenn ich jetzt die Tabelle erst leeren muss und die über 1000 Records mit obigem SELECT neu laden muss, dauert das extrem lange, weil die Daten in der DB-Tabelle speziell verschlüsselt sind und somit erst entschlüsselt werden müssen.
Aber weil die neu erfasste Zeile auch lokal unverschlüsselt vorliegt wollte ich obigen Comparator verwenden um die neue Zeile an der korrekten, sortierten Position anzuzeigen.
Wie, wo, was muss ich erweitern/ergänzen, wenn ich erst die Spalte X (sortCol) und dann innerhalb der Sortierung die Spalte Y (asc oder desc) sortiert haben möchte?
Egal was ich versuche, ich krieg immer nur eine Spalte sortiert.![Frown :( :(](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![Frown :( :(](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
![Frown :( :(](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Vielen Dank.
mit folgendem Code kann ich EINE Spalte einer JTable (mit model) sortieren.
Java:
class MyComparator implements Comparator<Object[]> {
protected boolean isSortAsc;
protected int isSortCol;
public MyComparator(boolean sortAsc, int sortCol) {
isSortAsc = sortAsc;
isSortCol = sortCol;
}
public int compare(Object[] o1, Object[] o2) {
int result = 0;
Object test1 = o1[isSortCol];
Object test2 = o2[isSortCol];
if (test1 instanceof String) {
result = ((String)test1).compareTo((String)test2);
}
else if (test1 instanceof Integer) {
try {
result = ((Integer)test1).compareTo((Integer)test2);
} catch (Exception e) {}
}
else if (test1 instanceof Double) {
try {
result = ((Double)test1).compareTo((Double)test2);
} catch (Exception e) {}
}
else if (test1 instanceof Date) {
try {
result = ((Date)test1).compareTo((Date)test2);
} catch (Exception e) {}
}
else if (test1 instanceof Boolean) {
try {
result = ((Boolean)test1).compareTo((Boolean)test2);
} catch (Exception e) {}
}
if (!isSortAsc) {
result = -result;
}
return result;
}
}
Lade aus Datenbank (mySql) mit "SELECT datum, betrag FROM myDB ORDER BY datum, betrag DESC;"
Das funktioniert in der korrekten Sortierung!
Jetzt füge ich eine Zeile (INSERT INTO myDB wurde mit spez. Verschlüsselung ausgeführt) der Tabelle hinzu. Funktioniert auch, aber
sie steht immer am Ende der Tabelle (ohne einsortiert zu werden).
Wenn ich jetzt die Tabelle erst leeren muss und die über 1000 Records mit obigem SELECT neu laden muss, dauert das extrem lange, weil die Daten in der DB-Tabelle speziell verschlüsselt sind und somit erst entschlüsselt werden müssen.
Aber weil die neu erfasste Zeile auch lokal unverschlüsselt vorliegt wollte ich obigen Comparator verwenden um die neue Zeile an der korrekten, sortierten Position anzuzeigen.
Wie, wo, was muss ich erweitern/ergänzen, wenn ich erst die Spalte X (sortCol) und dann innerhalb der Sortierung die Spalte Y (asc oder desc) sortiert haben möchte?
Egal was ich versuche, ich krieg immer nur eine Spalte sortiert.
Vielen Dank.
Zuletzt bearbeitet: