# Update an SQL Tabelle ?!



## Tejo1986 (3. Jan 2011)

Hallo,

ich würde gern Daten aus meiner HTML Tabelle an eine SQL Datenbank schicken.
Beim testen habe ich nun gesehen, dass die SQL Statements korrekt erzeugt werden (out.println meines Codes) und auch beim eingeben in die Konsole für meine SQL Tabellen, macht er das entsprechende Update auch super.

Nun meine Frage, wie schicke ich den fertigen Code an die DB ? Die Verbindung zur Datenbank steht schon.
Im Moment löse ich es in ner Schleife für jeden Wert extra per:


```
Statement stmt2 = connection2.createStatement();
         stmt2.executeQuery (UPDATE....SET....WHERE)
```

Wo liegt dort der Fehler ? Das SQL an sich ist korrekt. Muss es ja an den Zeilen irgendwie liegen oder ?


----------



## ARadauer (3. Jan 2011)

executeUpdate verwenden... dann sollte das klappen..


----------



## DerEisteeTrinker (3. Jan 2011)

Den Spruch kann der liebe ARadauer schon in seine Signatur aufnehmen, denn ich meine das gleiche Problem hatten wir in den letzten 14 Tagen mindestens einmal hier. *utfs rules*


----------



## Tejo1986 (3. Jan 2011)

Hey,
tip top, das geht soweit.
Naja die ersten 2 Zeilen sind Ziffern, die schreibt es auch in die DB.
Die 3.zeile ist ein Wort...steht bei mir ganz normal noch Test drin. Egal ob ich Test1, lala oder so reinschreibe....
er meldet: ORA-00904:"TEST1" oder "LALA": ungültiger Bezeichner....
das liegt irgendwie an der Großschreibung ?!
Muss ich vorher noch was true oder false setzen ?
In der SQL DB steht normal Test drin.

Danke schonmal!


----------



## DerEisteeTrinker (3. Jan 2011)

Poste mal bitte ein bissel mehr von dem was du eingibst und was er am Ende auch ausführt. Danke


----------



## Tejo1986 (3. Jan 2011)

Hey,

also ich hab ne Schleife, in der es die SQLs dann ausführt. k und i sind variablen weil es eine verschachtelte Schleife ist.

```
Statement stmt2 = connection2.createStatement();
          stmt2.executeUpdate
         ("UPDATE VALID_REFERENCES " +
           "SET REFERENCE="+inhalt+" " +
            "WHERE VALID_REFERENCES_ID="+k+" "+
            "AND REFERENCETYPE_ID="+(i+1)+"");
```

Bei den ersten beiden Ziffern führt er es aus und macht den Update.
Als dann in der 3.Zeile ein Text steht, wirft er diesen Fehler.
Komisch ist, dass ich "Test" schreibe und er im Fehler "TEXT" meldet.

ORA-00904: "TEST": ungültiger Bezeichner 

Der Datentyp in der Tabelle ist VARCHAR(25).

Danke schonmal!


----------



## Tejo1986 (3. Jan 2011)

Ok, habs selber gefunden.....um die Variable Inhalt musste nicht nur "+inhalt+" sondern '"+inhalt+"'.
Nun geht es.

Nächste Frage ;-)

Ich hab Felder, die ich ändere oder auch nicht.
Dafür habe ich ein Inputfeld und ein verstecktes.
Beide gebe ich mit, wenn ich Speichern möchte.
Um die "Kosten" zu sparen jedes mal nen Update zu machen, will ich es nur machen wenn die Werte nicht mehr gleich sind.

Jetzt habe ich inhalt.equalsIgnoreCase(inhalt_alt).
Nur irgendwie ist es immer "true". Muss ich noch was umwandeln ? Im Moment sind beides Strings.

grüße


----------



## SlaterB (3. Jan 2011)

> Komisch ist, dass ich "Test" schreibe und er im Fehler "TEXT" meldet.
>
> ORA-00904: "TEST": ungültiger Bezeichner 

da steht doch TEST (oder vorher Test1, lala) in der Fehlermeldung, nicht TEXT?!

------

Text musst du in Anführungszeichen angeben:
Update x='hallo'

-----

edit: ok, erledigt,
zu
> Jetzt habe ich inhalt.equalsIgnoreCase(inhalt_alt).
> Nur irgendwie ist es immer "true". Muss ich noch was umwandeln ? Im Moment sind beides Strings.

niemand weiß was das für Strings sind, 
ausführlichen Code, Beschreibungen, System.out.println-Ausgaben


----------



## ARadauer (3. Jan 2011)

schau dir mal PreparedStatemens an


----------



## Tejo1986 (3. Jan 2011)

Inhalt ist der String den es aus der Tabelle zieht, also VARCHAR(25)
Inhalt_alt ebenfalls.

Wenn ich in das Inputfeld, was inhalt dann per request.getParameter zugewießen wird, ändere steht ja dort was anderes drin als in inhalt_alt. 
Beim Speichern will ich dann vergleichen, nur ist es irgendwie immer gleich.

Nun habe ich mal inhalt geändert und dann beide per println ausgeben lassen.

inhalt: test
inhalt-alt: test_neu

Ist das für equals gleich ?


----------



## SlaterB (3. Jan 2011)

an sich nein, in Code kann es dennoch tausende Dinge geben die du anders machst als du hier beschreibst

z.B.
- in einer Methode eine lokale Variable ändern, in einer anderen das gleichnamige Klassenattribut verwenden
- string.substring(0,3); ändert die Variable string nicht
und wer weiß was alles

nur sauberer Code den andere auch ausführen können (etwas schwierig mit DB)
oder der zumindest gut geloggt ist, hilft, deine Beschreibungen dazu sind nett, aber alleine nicht unbedingt ausreichend

mit 

```
System.out.prinlnt("jetzt gehts los");
String testA = inhalt; // oder ähnlich, neue Variablen zur Sicherheit
String testB = ..;
System.out.prinlnt("testA: "+testA);
System.out.prinlnt("testB: "+testB);
System.out.prinlnt(testA.equals(testB));
System.out.prinlnt(testA.equalsIgnoreCase(testB));
System.out.prinlnt("schon wieder zu Ende");
```
in dein Programm eingebaut + zugehöriges Log posten kann man vielleicht bisschen was anfangen,
wobei es dir höchstens helfen könnte, herauszufinden, dass die Strings doch gleich sind oder equals==false herauskommt,
wenn du noch auf equals==true bestehst muss der Fehler irgendwo anders liegen, das gibts einfach nicht


----------

