# JTable änderung sofort auch in MySQL ändern.



## Muffelhs (21. Feb 2010)

Hallo Community,

schreibe ein kleines Programm womit ich auch datenbanken zugreifen kann und deren Tables dann in meiner JTable anzeigen lassen will.

Das klappt auch alles bis jetzt prima.

Nun will ich eine änderung in der Jtable auch sofort in der mysql datenbank übernehmen.

Die Methode changeValueAt in der Table Model klasse ist dafür zuständig.


```
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
		values[rowIndex][columnIndex] = aValue.toString();
	
	}
```

das ist ja soweit klar.

die TableModel klasse hat zugriff auf meine sql klasse.
das auslesen in der sql klasse mache ich in form einer schleife 


```
try {			
			rs = st.executeQuery( "SELECT * FROM " + sqlTable );
			ResultSetMetaData rsmd = rs.getMetaData();
			int n = rsmd.getColumnCount();
			collumns = new String[n];
			for( int i=1; i<=n; i++ )    
				collumns[i-1] = rsmd.getColumnName(i);
			values = new Vector[collumns.length];
			for(int j = 0 ; j < collumns.length; j++){
				values[j] = new Vector();
			}
			while( rs.next() ) {
				for( int i=1; i<=n; i++ )  
					values[i-1].put(rs.getString(i));
			}			
		}catch( Exception ex ) {
			System.out.println("Fehler beim kopieren der Tabelle.");
		}finally
```

das auslesen müsste ich ja weiterhin machen bis ich an den bestimmten wert komme den ich ändern muss.
leide ist mit keine funktion in sql bekannt womit ich sofort auf eine zelle mittels row und collumn zugreifen kann ..

könnt ihr mir eine möglichkeit sagen wie ich sofort die änderung in der jtable auch in der sql table machen kann?

gruß

Muffel


----------



## SlaterB (21. Feb 2010)

mit dem ColumnName weißt du doch welches Feld in der Datenbank betroffen ist,
bleibt noch die Zeile, da solltest du eine eindeutige Id in der ersten Column anzeigen

völlig generisch ohne irgendwelche Informationen über die Daten wird es kaum gehen, 
notfalls baue dir eine Query, die alle Werte aus der aktuellen Zeile der Tabelle vor der Veränderung ausliest und in der DB abfragt:
update .. where column1 = wert1 and column2 = wert2 ..

aber dann hast du spätestens dann verloren, wenn zwei identische Einträge in der DB vorliegen,
(wobei man mit diesem Fall natürlich auch mit jedem anderen Verfahren Probleme hätte)


----------



## Muffelhs (21. Feb 2010)

diese 2 möglichkeiten gingen mir auch durch den kopf.

wenn ich mit meinen tabellen arbeite ist es ja auch kein problem ne id spalte zu machen.

ich kann aber nicht bei jeder fremden table die ich einlese einfach eine spalte hinzufügen mit ner eindeutigen id..
und bei dem 2. vorschlag hat man eben das problem mit den doppelten einträgen


wieso hat sql keinen befehl womit man sofort auf eine zelle mittels row und column zugreifen kann?
völlig unverständlich =/

gibts noch irgendwelche möglichkeiten ?


----------



## ice-breaker (21. Feb 2010)

Muffelhs hat gesagt.:


> wieso hat sql keinen befehl womit man sofort auf eine zelle mittels row und column zugreifen kann?
> völlig unverständlich =/


das nennt sich Primary Key.
Und auf Spalten kann man immer zugreifen.


----------



## Muffelhs (21. Feb 2010)

ice-breaker hat gesagt.:


> das nennt sich Primary Key.
> Und auf Spalten kann man immer zugreifen.



habe auch nicht gesagt, dass man nicht auf eine spalte zugreifen kann.
ich habe gesagt das man nicht sofort auf eine Zelle mit Hilfe von der Spalte und der Zeile zugreifen kann!


----------



## ice-breaker (21. Feb 2010)

das geht natürlich auch 
einfach in den where-Teil alle Attribute deiner Zeile reinmachen.

also wenn deine JTable die Spalten name, nachname, geburtsdatum hat und du das Geburtsdatum änderst:

```
UPDATE user SET gebdate = NEW_DATE WHERE name = JTABLE_NAME and nachname = JTABLE_NACHNAME and gebdate = OLD_DATE
```

die groß geschriebenen Strings sind natürlich zu ersetzen.


----------



## Gast2 (22. Feb 2010)

Muffelhs hat gesagt.:


> habe auch nicht gesagt, dass man nicht auf eine spalte zugreifen kann.
> ich habe gesagt das man nicht sofort auf eine Zelle mit Hilfe von der Spalte und der Zeile zugreifen kann!



Ja durch den PK kannst du doch auf die Zeile zurückgreifen ...
Du musst in deiner JTable nur jedes mal den PK in der 1. Spalte(kann man auch unsichtbar machen) anzeigen lassen, damit du beim update den PK mitangeben kannst!!!


----------



## ARadauer (22. Feb 2010)

oder hibernate verwenden....


----------

