# Update table SET will nicht



## OnDemand (12. Nov 2014)

Hallo zusammen, 

wer kann mir sagen warum diese Methode nicht in die Spalte schreibt?!

Ich weiß einfach nicht warum es leer bleibt, wenn ich mir die Werte mit Sysout ausgeben lasse, stimmt alles, auch wenn ich eine andere Spalte in der DB statt beschreibung_kurz, werden die Daten korrekt in die DB geschrieben..

Stimmt hier was mit der Spalte nicht?!?! Hab schon VARCHAR(45) LONGTEXT etc probiert.. Die Felder sind einfach leer, nicht mal NULL


```
public static void insertBeschreibungKurz(String artikelNummer, String beschreibungKurz) throws SQLException {
		Statement statement = conn.createStatement();
		statement.executeUpdate("Update artikel SET beschreibung_kurz='" + beschreibungKurz + "' WHERE artikelnummer='" + artikelNummer + "'");
	}
```

EDIT:
Ich Blitzmerker....

Seit wann dürfen die Tabellennamen keine Unterstriche haben???? Dann klappt es :bahnhof:


----------



## Joose (12. Nov 2014)

NicoDeluxe hat gesagt.:


> Seit wann dürfen die Tabellennamen keine Unterstriche haben???? Dann klappt es :bahnhof:



Meinst du Tabellen oder Spaltennamen?

Spalten dürfen normalerweise ein "_" beinhalten, bei Tabellennamen sollte es eigentlich auch kein Problem geben.
(Wobei es hier natürlich je nach Datenbank - MySql, MSSQL, SQLite, .... -  Unterschiede geben kann)


----------



## OnDemand (12. Nov 2014)

Spaltennamen meint ich sorry. Ist ja komisch nutze aktuellste mysql ohne klappt super.


----------



## fehlerfinder (13. Nov 2014)

(Folgendes hatte ich exakt so schon in deinem ersten Thread zu diesem Thema eingetragen, aber hier ist's ja besser aufgehoben)

wenn ich dich richtig verstanden habe, willst du diesen Befehl ja nur dann ausführen, wenn deine Artikelnummer noch nicht in der DB enthalten ist. Richtig?

Dein Methodenname passt schon - insertBeschreibungKurz. Aber dein Statement passt nicht dazu. Update führt ein Update durch, daher der Name - wenn kein Datensatz mit der gegebenen Artikelnummer vorhanden ist, wird natürlich auch nichts aktualisiert. Leuchtet ja ein. In deinem Fall wäre ein SQL "insert"-statement das Richtige.

So - und jetzt noch eine neue Ergänzung:
Wenn es beim zweiten Mal "auf einmal" geklappt hat, dann waren - warum auch immer - Daten zu dieser Artikelnummer vorhanden. Da wird irgendwo ein INSERT gelaufen sein.

Ach ja:
Trage doch, falls das Problem weiterhin existiert, noch die Ausgabe von "desc artikel" hier ein. Könnte ggf. auch weiterhelfen.


----------



## OnDemand (13. Nov 2014)

Hallo, das Problem hat sich durch Umbennennung der Spaltennamen in Luft aufgelöst.:bahnhof:


----------



## fehlerfinder (13. Nov 2014)

Und du bist sicher, dass du mit einem update-Befehl Datensätze in die Datenbank eingefügt(!) hast?

An den Unterstrichen kann es eigentlich nicht liegen. Die "mysql"-DB selber verwendet Unterstriche sowohl in Tabellen- als auch in Spaltennamen.


----------



## OnDemand (13. Nov 2014)

100% Sicher! Hab soeben nochmal meine Tabelle geleert und mit UPDATE Daten **eingefügt**!

Vielleicht liegt es an der Libary?

Edit zb mit 


```
UPDATE artikel SET artikelname ='Schlüppa' WHERE artikelnummer ='122'
```

Und die Spalte artikelname ist leer gewesen


----------



## fehlerfinder (14. Nov 2014)

mmh, schmunzel, wir müssten da mal ein paar Begriffe geraderücken...

Zunächst: ich habe gerade mal eine kleine Datenbank aufgesetzt und "die Sache mit dem Update und Insert" getestet. Es verhält sich wie vermutet (s.u. - zuerst die Begrifflichkeit).

Du schreibst, du hast "mit update Daten eingefügt". Ich schrieb (sinngemäß) "update fügt keine Datensätze ein". Die "...sätze" machen den Unterschied. Ein Datensatz ist die Zusammenfassung der Werte in allen Spalten, die - in deinem Fall - zu EINEM Artikel gehören, also z.B. "artikelnummer, artikelname". Mit INSERT fügst du einen DatenSATZ ein, z.B.


```
insert into artikel (artikelnummer, artikelname) values ('122', 'Schlüppa');
```

Je nach Definition deiner Tabelle "artikel" benötigst du auch nicht alle Angaben in deinem Insert-Statement. So ginge vermutlich auch:


```
insert into artikel (artikelnummer) values ('122');
```

Dann ist der DatenSATZ vorhanden, die Spalte "artikelname" ist aber leer.

In diesem Zustand (DatenSATZ ist bereits vorhanden) kann dein UPDATE-Statement Daten (Achtung: ohne "SATZ") "einfügen". Man spricht dann eben von "einen DatenSATZ aktualisieren" oder auch "Daten aktualisieren", indem einzelne Spalten mit neuen Werten belegt werden. Ob der Wert vorher NULL (oder ein Leerstring) war oder ob da z.B. 'Anzughose' in der Spalte stand, ist belanglos für das UPDATE.

Wenn du allerdings gar keinen DatenSATZ mit der Artikelnummer '122' in deiner Tabelle hast, dann wirst du mit einem UPDATE niemals einen solchen DatenSATZ erzeugen können.


----------



## OnDemand (14. Nov 2014)

Ahhhhh ja stimmt! Jetzt leuchtet es ein, es werden zuerst alle Artikelnummern eingefügt und dann die Attribute ergänze, wenn verfügbar. Dann wird kein Datensatz ge-insert  sondern der Datensatz um den Wert ergänzt  Siehste, haben wir das auch geklärt =)


----------



## fehlerfinder (14. Nov 2014)

NicoDeluxe hat gesagt.:


> Siehste, haben wir das auch geklärt =)


Bitte, gerne


----------

