2 Stimmen

Umgehen eines Apostrophs in Java

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?

13voto

jqa Punkte 1342

Verwenden Sie vorbereitete Erklärungen. Sie können nicht nur alle Sonderzeichen verarbeiten, sondern sind auch viel robuster und helfen, SQL-Injection-Angriffe zu verhindern.

6voto

Yishai Punkte 87548

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.

5voto

RHSeeger Punkte 15604

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.

2voto

Michael Todd Punkte 16235

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

1voto

Kaleb Brasee Punkte 49955

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!");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X