Ich bin noch etwas neu in Java und versuche, Daten in eine Datenbank einzufügen. Ich erhalte eine Fehlermeldung, wenn ich eine Zeichenkette einfüge, die ein "s" enthält, so dass mein Endergebnis wäre, das Hochkomma zu entkommen. Wie kann ich das bewerkstelligen?
Antworten
Zu viele Anzeigen?Das Problem liegt nicht bei Java, sondern bei der zugrunde liegenden Datenbank. Höchstwahrscheinlich reihen Sie Ihre Parameter wie folgt aneinander:
String sql = "select * from sometable where somefield = " + someObject.getSomeField();
Tun Sie das nicht. Verwenden Sie PreparedStatement stattdessen.
Das hat den zusätzlichen Vorteil, dass SQL-Injektionsangriffe verhindert werden, wenn es sich um eine Anwendung handelt, die sich um solche Dinge kümmern muss.
Verwendung von StringEscapeUtils :
StringEscapeUtils.escapeSql(yourstring);
Vorsicht : Ab Commons Lang 3.0 :
StringEscapeUtils.escapeSql
Diese Methode war irreführend und behandelte nur die einfachsten möglichen SQL-Fälle. Da SQL nicht der Schwerpunkt von Lang ist, war es nicht sinnvoll, diese Methode beizubehalten.
Hängt von der Datenbank ab, aber in SqlServer können Sie '' verwenden.
EDIT: In MySql können Sie ein doppeltes Hochkomma oder einen Backslash verwenden: http://www.faqts.com/knowledge_base/view.phtml/aid/630
Ich nehme an, Sie verwenden eine java.sql.Anweisung und den Aufruf der Methode executeQuery mit einem String. Das ist schlecht, denn es ist möglich, SQL-Injection durchzuführen. Sie sollten eine java.sql.PreparedStatement und dann können Sie jede beliebige Zeichenkette als Parameter angeben, und Sie haben das Problem nicht mehr.
Zum Beispiel:
PreparedStatement pstmt = con.prepareStatement("UPDATE MY_TABLE SET TEXT_FIELD = ?");
pstmt.setString(1, "any String 'will work here!");
- See previous answers
- Weitere Antworten anzeigen