Frage

In der folgenden SQL-Abfrage der PreparedStatement-Klasse:

String query_descrip = "insert into timitemdescription (itemkey, languageid, longdesc, shortdesc) values (?, 1033, ?,?)";
PreparedStatement pstmt2 = con.prepareStatement(query_descrip); 
pstmt2.setInt(1, rs4);
pstmt2.setString(2, itemdescription);
pstmt2.setString(3, itemdescription.substring(0,39));
pstmt2.executeUpdate();       

Ich habe manchmal Apostrophe und einfache und doppelte Anführungszeichen in meinen Artikelbeschreibungen. zum Beispiel mit einem Punkt meine späte Ausgabe ein „Planar 22“ ist Monitor“. Natürlich war die Zeichenfolge falsch interpretiert und dachte, die Beschreibung Wert gerade war‚Planar 22‘. Was ist der beste Weg, Sonderzeichen in einem String zu behandeln?

Ich habe gelesen, dass einige Leute Regex verwenden, schien jedoch diese von Fall zu Fall spezifisch. Eine andere Möglichkeit, ich arbeite ist das String-Array Zeichen für Zeichen zu lesen. Ich habe gehofft, es war eine effizientere und weniger ressourcenintensive Art und Weise, dies zu tun.

UPDDATE Nach weiteren umfangreichen Tests stellt sich heraus, es in meinem Code vorkommenden mehr Probleme. es war auch ein URL-Codierung Problem. Wenn das HTML-Formular von dem jsp Code aufgefüllt wurde, würde es versuchen, das Beschreibungsfeld zu einem Online-Formular zu bewegen, es kürzt es dort auf dem Formular statt auf der Abfrage. jTDS korrigiert auch das Problem, die Sonderzeichen erhalten. Da jTDS ein Glas ist, es half auch das Neustarten des Systems zu vermeiden. Ich vergibt die jTDS die Prämie Thread, da das war, was ich teilweise verwendet.

Vielen Dank im Voraus

War es hilfreich?

Lösung

Da Sie verwenden PreparedStatement, Sie müssen nichts tun, überhaupt, wird es durch den JDBC-Treiber für Sie behandelt werden. Das einzige, was Sie zu achten haben, ist nicht-ASCII-Zeichen, und zwar müssen Sie die DB-Tabellen eine Codierung für Textspalten stellen Sie sicher, verwenden, die alle Zeichen umgehen können Sie verwenden werden. Aber das ist ein SQL-Problem, kein Java Problem.

Andere Tipps

Sie brauchen nicht diese Zeichen speziell zu behandeln, wenn Sie sie als Parameter an einem PreparedStatement sind verbindlich, wie Sie tun. Das ist einer der wichtigsten Vorteile des hergestellten statement approach.

Wie die anderen gesagt haben, Sie müssen nichts tun, die Sonderzeichen zu behandeln. Sie müssen einen anderen JDBC-Treiber versuchen.

Versuchen Sie, die jTDS Treiber und sehen, ob es Sie mit Ihrem PreparedStatement hilft. Es ist ein Open-Source-Datenbank-Treiber für SQL Server. Ich benutze es bei der Arbeit jetzt und es funktioniert wie ein Weltmeister und entspricht tatsächlich die JDBC-Spezifikation im Gegensatz zu den MS-Treiber.

Ich bin ziemlich sicher, das Problem ist nicht mit dem Code, den Sie geschrieben. Um zu beheben:

  1. Haben Sie versucht, in einem Debugger den Code-Schnipsel oben ausgeführt wird? Was ist der Wert von „ItemDescription“, bevor Sie es an den Datenbank-Aufruf übergeben?
  2. Wie Verifizieren Sie tatsächlich den Wert in der Datenbank? Ist das mehr Java-Code? Oder betrachten Sie es mit SQLCMD oder so etwas?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top