# [SQL] UPDATE oder REPLACE INTO Befehl



## BlackScorp21 (14. Dez 2007)

Habe mal eine Frage zu dem UPDATE Befehl in SQL.

Habe folgende Situation

Lasse in Java Daten einer gesuchte Person in 4 Textfeldern  ausgeben.

Speicher diese Inhalte in Variablen (nameAlt. vornameAlt, klasseAlt, abcAlt)

Jetzt soll der Anwender, wenn sich was geändert hat die Daten in den Textfeldern ändern.

Dann soll in der Datenbank aus : Meyer Klaus 1 a  --> Meyer Hubert 1 a



```
String sqlQuery = 	"UPDATE schueler  											" +
				"			Set name = '"+nameNeu+"', vorname = '"+vornameNeu+"', 		    " +
				"				klasse ='"+klasseNeu+"', abc = '"+abcNeu+"' 			       " +
				"			WHERE name = '"+nameAlt+"' AND vorname = '"+vornameAlt+"'	 " +
				"			AND	 klasse = '"+nameAlt+"' AND abc = '"+abcAlt+"';";
```

Allerdings bekomme ich folgende Fehlermeldung:



> com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: 'Nachname'



Darf ein Wert "Nachname" nicht wieder mit "Nachname" überschrieben werden???


Muss ich dafür jetzt REPLACE INTO nehmen?


----------



## maki (14. Dez 2007)

"Data truncation" heisst normalerweise, dass du zB versuchst einen String mit 10 Zeichen in ein Varchar felfdmit wengier Zeichen zu speichern, dass führt zum Fehler.

Also: Wie lang darf denn das Feld Nachname in der DB sein?


----------



## BlackScorp21 (14. Dez 2007)

Danke für die Superschnelle antwort! Leider leigt es da wohl nicht dran!

Die Namensfelder für vor und Nachname dürfen beide 30 Char zeichen lang sein.
Da bin ich nicht drüber.

Mein Test Name war halt "Nachname" und der Test Vorname "Vorname"




> DOUBLE value: 'Nachname'



heißt doch das ein Wert doppelt vorkommt. 
Deswegen dachte ich daran, dass in der Spalte nachname man den Wert "Nachname" nicht durch "Nachname" ersetzen könnte. Aber das geht doch sicher oder? Wäre ja blöd wenn nicht!


----------



## The_S (14. Dez 2007)

Natürlich geht das nicht. Ich sehe die Fehlermeldung zwar zum 1. Mal, hört sich für mich aber so an, als ob du versuchst, ein VARCHAR in ein DOUBLE-Feld zu bringen.


----------



## BlackScorp21 (14. Dez 2007)

Der Wert der in der DB drin steht ist richtig.

Den wert den ich reinschreiben will lese ich mit JTextfield.getText(); aus und speicher ihn auch in einem String.

Also 
	
	
	
	





```
String nameNeu = txtName.getText();
```

Verstehe also nicht warum da ein double wert zustande kommen soll.


----------



## maki (14. Dez 2007)

Verwende Prepared Statements um solche und andere Probleme zu vermeiden bzw. besser damit umgehen zu können.


----------



## The_S (14. Dez 2007)

Äh sorry, meinte "natürlich geht das!".

zu deinem jetztigen Post: Nicht dein Java-Wert ist Double, sondern die Spalte in deiner DB.


----------



## The_S (14. Dez 2007)

evtl. solltest du bei deiner Where-Bedingung auch 

AND    klasse = '"+klasseAlt+"'

schreiben und nicht

AND    klasse = '"+nameAlt+"'

klasse ist dann vermutlich ein double und nameAlt eben ein String/varchar. So kommts zu dem Fehler. (denk ich mal)


----------



## BlackScorp21 (14. Dez 2007)

Und wieder einmal scheiter ich wegen einem ganz einfachem Fehler.
Und ich suche was an der Syntax falsch ist.   

Danke!

Es geht! 


Natürlich muss da:

AND klasse = '"+klasseAlt+"' 

stehen.

Er vergelicht sonst wirklich ein Zeile die einen Integerwert besitzt mit dem String aus der Variable.


Dank euch :toll:


----------



## HoaX (14. Dez 2007)

oder einfach gleich preparedstatements nehmen, dann muss man sich darum nicht kümmern


----------



## The_S (17. Dez 2007)

öhm, doch!? Wenn er mittels setString einen String setzt, die Spalte aber ein double ist, dann fliegt er trotzdem auf die Schnauze. Mit PreparedStatements fällt sowas nur schneller auf, verhindert wird das aber nicht.


----------

