2012-07-27 12 views
14

Próbuję odczytać warunki z bazy danych (> 10 KB) i używam tego terminu w innym zapytaniu. Dostaję następujący błąd w Oracle:Jak uniknąć pojedynczego cudzysłowu w sql, który powoduje, że "cytowany ciąg znaków nie został poprawnie zakończony"?

notowane ciąg nie prawidłowo zakończone”

zrobiłem

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

ale nie wydaje się, aby wykonać zadanie ode mnie. Poza tym terminy te są tokenami z dokumentów, gdy są konwertowane na tekst. Czy istnieje wyrażenie regularne, które może przezwyciężyć ten problem?

Kwerenda SQL jest dokładny:

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

Używam Java. Wymiana nie działa dla mnie.

+1

Należy przeczytać o [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) – Oded

+3

Zobacz także http://bobby-tables.com/, aby uzyskać szczegółowe informacje na temat używania sparametryzowanych zapytań w w jakimkolwiek języku, z którego korzystasz. To ochroni cię przed iniekcją SQL, o której wspomina Oded. –

+1

Tak, przeszedłem przez to i sparametryzowano zapytanie !! Dzięki wielkie ! – Aashima

Odpowiedz

34

można uciec jeden cytat, powtarzając go:

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

Jeszcze lepszym rozwiązaniem byłoby zapytania parametrycznego. Na przykład, musielibyśmy znać twój język klienta.

+0

Więcej specjalnych znaków w *** Oracle ***, nie tylko _character_ ** '**? – Kiquenet

Powiązane problemy