# Problem mit Hochkomma



## Alex_winf01 (19. Jun 2008)

Ich habe ein Textfeld, in dem ein Anwender theoretisch auch ein Hochkomma setzen kann. Nun habe ich schon flogendes probiert:


```
String update = "update dokumentation set feld = 'Bezeichnung', textfeld = '\'irgendein Text\'';";
```

Ohne Erfolg. 

Ich habe es auch schon mit dem PreparedStatement probiert - ohne Erfolg.


```
String update = "update dokumentation set feld = 'Bezeichnung', textfeld = ?";
PreparedStatement pstmt = con.prepareStatement(update);
pstmt.setString(1, textfeldWert);
ResultSet rset = pstmt.executeQuery();
```

Eine weitere Info: update ist mit + zusammengesetzt.


----------



## Guest (19. Jun 2008)

PreparedStatement ist schon die richtige Lösung, nur statt


```
ResultSet rset = pstmt.executeQuery();
```

solle es ein


```
ResultSet rset = pstmt.executeUpdate();
```

sein.


----------



## Guest (19. Jun 2008)

war falsch... besser:


```
int rowsAffected = pstmt.executeQuery();
```


----------



## Alex_winf01 (19. Jun 2008)

Funktioniert trotzdem nicht. Hat jemand noch ein Hinweis?


----------



## Guest (19. Jun 2008)

Alex_winf01 hat gesagt.:
			
		

> Funktioniert trotzdem nicht. Hat jemand noch ein Hinweis?



Ja, du hast selbst einen.

Ein wichtiger Hinweis wäre was nicht funktioniert.

Werden die falschen Daten geändert?
Werden keine Daten geändert?
Kommt eine Exception?
Wenn ja, welche?

Etwas mehr Programmcode ist evtl. auch schon ein guter Hinweis...


----------



## thE_29 (19. Jun 2008)

Also executeQuery ist mal definitiv falsch! Das wird nur bei selects gebraucht.

Desweiteren was kommt für ein Fehler genau?


----------



## Alex_winf01 (19. Jun 2008)

@ thE_29

Ich kann keinen Text mit Hochkomma eintragen. Das läuft also auf einen SQL-Syntax-Fehler hinaus. Datenbank: H2


----------



## thE_29 (19. Jun 2008)

Also kommt der Text rein oder kommt ne Exception?

Und wenn du ohne Hochkomma probierst, gehts dann?


----------



## Alex_winf01 (19. Jun 2008)

@ thE_29 

Es wird eine SQL-Exception geworten, dass eine Verletzung der SQL-Syntax vorliegt. Lasse ich das Hochkomma weg, funzt es. :cry:


----------



## Gelöschtes Mitglied 5909 (19. Jun 2008)

> STRING_FORMAT_ERROR_1 = 90095
> The error with code 90095 is thrown when calling the method STRINGDECODE with an invalid escape sequence. Only Java style escape sequences and Java properties file escape sequences are supported. Example:
> 
> CALL STRINGDECODE('\i');



gugg mal ob der errorcode stimmt

wenn nicht

http://h2database.com/javadoc/org/h2/constant/ErrorCode.html

bzw

http://h2database.com/html/sourceError.html

und da die exception pasten


----------



## Alex_winf01 (19. Jun 2008)

Also, ich bekomme folgende Fehlermeldung:



> Syntax  Fehler in SQL Befehl update tabelle set notizen = ''[*]'
> Syntax Fehler in SQL statement update tabelle set notizen = ''[*]'; SQL statement
> update tabelle set notizen = ''' [42000-64]


 :cry:


----------



## ThomasMueller (22. Jun 2008)

Laut SQL Standard müssen Hochkommas verdoppelt werden:


```
String update = "update dokumentation set feld = 'Bezeichnung', textfeld = '''irgendein Text''';";
```


```
String update = "update dokumentation set feld = 'Bezeichnung', textfeld = 'Das war''s'";
```

PreparedStatement: executeQuery darf nur für Queries (SELECT, CALL) verwendet werden, dies ist im JDBC Standard so definiert. Für INSERT, DELETE, UPDATE, CREATE usw. muss executeUpdate verwendet werden. Beispiel:


```
int updateCount = pstmt.executeUpdate();
```


----------



## Alex_winf01 (22. Jun 2008)

@ ThomasMueller

So habe ich es jetzt auch lösen könne. Problematisch müssten dann ja auch Kommas sein - oder? Wie müsste das dann aussehen? Ich vermute dann mal, die Kommas müssten durch Semikolon ersetzt werden (mit Hilfe der Methodhe replaceAll).


----------



## Guest (22. Jun 2008)

Kommas sind nicht problematisch. Einzig die Hochkommas müssen ersetzt werden. Bei einigen Datenbanken muss der Back-Slash (\) verdoppelt werden, aber nicht bei H2. Dies ist aber nicht ANSI SQL Syntax. 

Siehe auch http://www.h2database.com/html/grammar.html#string


----------

