JTable und unsichtbare daten

Layna

Erfahrenes Mitglied
Hallo, Leute :).
Ich verzweifel hier so ein bisschen an einer JTable die Datenbank-Daten Enthält.
Jetzt möchte ich mir gerne irgendwo den Primärschlüssel der Datenbank zu diesem Datensatz merken.. und zwar OHNE ihn unbedingt dem user anzuzeigen (dem kann die ID ja egal sein),
Ich hatte an eine unsichtbare Spalte in der JTable gedacht... habe dann ehrausgefunden das das ncith geht.
Fällt emandem von euch eine alternative ein? Ich ahhbe irgendwie keine idee dazu..
 
Arbeite doch einfach mit TableRows, bei der jede Row eine Zeile Deiner DB enthält. Du zeigst dann eben bei getValueAt nur die Daten/Variablen an, die Dir auch zusagen bzw die Du angezeigt sehen möchtest. Such mal hier im Forum nach TableRows, dazu müsstest Du Beiträge von mir finden.
 
Reingeschrieben kriege ich die daten ja.. ich möchte die änderungen dann nur wieder den entsprechenden Datensätzen in der Datenbank zuördnen.
Ich möchte also gerne die änderungen die der User in der JTable macht zurück in die Datenbank schreiben.
Vielleicht stehe ich gerade wieder auf dem schlauch, aber diese Rückzuordnung ist es die mir Probleme macht.
Mein erster gedanke war sich igrendwie an der Zeilennummer zu orientieren, aber die Tabelle soll im nächsten Schritt sortierbar werden.
 
hmm weiss nicht ob die idee funktioniert, aber du kannst eine einspaltige tabelle mit der gleichen anzahle reihen wie die orginaltabelle erzeuen, dort die PR speicher und die ganze tabelle einfach nicht anzeigen lassen? ist zwar nicht umbedingt guter programmier stil, aber was solls..
 
Das würde gehen solange ich die eiegntlcihe Tabelle nciht sortiere... und das soll ja später einmal möglich werden (Wenn cih mich daran setze bin ich sicher wieder hier zu finden ;)).
 
Ok, also von vorne.

Ich lese die Datensätze aus einer MySql-Datenbank aus, und schreibe die in eine JTable (eigentlich ein eigenes Table-Model, wird nur eben als JTable hinzugefügt) .
Meine Idee ist jetzt dass in dieser JTable Änderungen vorgenommen werden und dann in die Datenbank zurückgeschrieben werden.
Das Objekt, dass die JTable enthält hat ebenfalls das ResultSet der Abfrage, die zu den Daten führten, noch gespeichert.
Mein problem ist jetzt:
Ich will die ID, die mir als Primärschlüssel dient NICHT in der JTable anzeigen.
Was mir jetzt nicht gelingt ist die Zeilen der JTable wieder den Datensätzen zuzuordnen

Ich hoffe mein Problem ist klar geworden... wenn nicht, nachfragen :)
 
hmm, du koenntest den PK mit in die tabelle schreiben lassen, nur modifiziert als string mit einem vorzeichen wie # und dann dem celleditor sagen das du in der erste zeile schwarze farbe haben willst oder weisse schrifft dann ist der pk da nur der user sieht in nicht..brauchst gleube ich nicht mal das vorzeichen, wenn der pk immer in der ersten spalte ist, dann hast du aber eine "leer" spalte weiss nicht ob dir das passt...
 
Hi,

also, "unsichtbare Primärschlüssel" würde ich bezogen auf JTable immer nach folgendem Modell behandeln (wie man es auch bei JLists machen könnte):

Swing-Daten-Modell subclassen, Arraylist, Vektor o.ä. für das Verwalten der zu verbergenden Daten benutzen und bei den Standart-Methoden für Befüllen mit / Löschen von Daten behandeln & Methode für das Auslesen der ArrayList-/Vektordaten implementieren.
Man sollte hierbei auch immer die Default-Implementierungen des Swing-Modells als Elternklasse heranziehen, da diese, wie z.B. im Falle von TableModels, völlig ausreichend sind (in den Java-Tutorials von Sun wird leider oft der gegenteilige Eindruck geschaffen).

Also, hier nochmal ein Beispiel, daß sich auf Dein Problem anwenden lassen sollte (ansonsten "Feel free to flame me"):

Code:
  class CTableModel extends DefaultTableModel{
  	ArrayList a = new ArrayList();
    
  	/**
  	 * Hier kann man natürlich nicht mit einem 
  	 * Datenvektor / Datenarray initialisieren, also immer mit
  	 * parameterlosem Kontruktor instanzieren, Daten des 
  	 * Models schreibst Du über <code>insertRow</code> rein
  	 */
  	CTableModel(){}
  
  	/**
  	 * Daten pro Zeile einfügen, Primärschlüssel unsichtbar mitspeichern
  	 *
  	 * @param index		 (int) Zeile
  	 * @param data		  (Vektor) hält ausgelesene Daten
  	 * @param primaryKey	(int) Primärschlüssel aus DB
  	 */
  	public void insertRow(int index, Vector data, int primaryKey){
  	  super.insertRow(index, data);
  	  a.add(index, new Integer(primaryKey));
  	}
  
  	/**
  	 * Zeile aus DefaultTableModel entfernen
  	 *
  	 * @param index (int) Zeile, die gelöscht werden soll
  	 */
  	public void removeRow(int index){
  	  super.removeRow(index);
  	  a.remove(index);
  	}
  
  	/**
  	 * Den mit einer Datenreihe in die Arraylist gespeicherten
  	 * Primärschlüssel passend zur erwünschenten Datenreihe auslesen
  	 *
  	 * @param index (int) Datensatz-Reihe, die ausgewählt / durchlaufen etc. wird
  	 * @return	  (int) Primärschlüssel aus DB
  	 */
  	public int getPrimaryKey(int index){
  	  return Integer.valueOf(a.get(index).toString()).intValue();
  	}
    }

Cheers,

Snake
 
Zurück