2012-07-27 4 views
14

Ich versuche, Begriffe aus einer Datenbank (> 10K) zu lesen, und ich verwende diesen Begriff in einer anderen Abfrage. Ich erhalte den folgenden Fehler in Oracle:Wie kann ein einzelnes Anführungszeichen in sql vermieden werden, das dazu führt, dass die Anführungszeichenfolge nicht ordnungsgemäß beendet wird?

Zeichenfolge in Anführungszeichen nicht ordnungsgemäß beendet‘

I

tat
term.replaceAll("'", "\\'"); 

aber das scheint nicht die Arbeit von mir zu tun. Außerdem sind diese Begriffe Token von Dokumenten, wenn sie in Text konvertiert werden. Gibt es einen regulären Ausdruck, der dieses Problem überwinden kann?

Die genaue SQL-Abfrage ist:

String sql = "Select * from indexDB where (DocID=" + d.getDocId() + "and Term='" + term + "')"; 

ich Java bin mit. Der Ersatz funktioniert nicht für mich.

+1

Sie müssen auf [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) lesen – Oded

+3

Siehe auch http://bobby-tables.com/ für Details zur Verwendung von parametrisierten Abfragen in egal welche Sprache du benutzt. Dies schützt Sie vor einer SQL-Injektion, auf die sich Oded bezieht. –

+1

Yeah ging durch und parametrisierte Abfrage tat es !! Vielen Dank ! – Aashima

Antwort

34

Sie können einen Apostroph entkommen, indem es zu wiederholen:

term.replaceAll("'","''"); 

Eine noch bessere Option ist eine parametrisierte Abfrage wäre. Zum Beispiel müssten wir Ihre Client-Sprache kennen.

+0

Weitere Sonderzeichen in *** Oracle ***, nicht nur die _character_ ** '**? – Kiquenet

Verwandte Themen