2012-07-27 29 views
14

Estoy tratando de leer los términos de una base de datos (> 10K) y estoy usando ese término en otra consulta. Estoy recibiendo el siguiente error en Oracle:¿Cómo escapar de comillas simples en sql que está causando que 'la cadena entre comillas no finalice correctamente'?

cadena entre comillas no ha terminado correctamente'

lo hice

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

pero eso no parece hacer el trabajo de mí. Además, estos términos son tokens de documentos cuando se convierten en texto. ¿Hay una expresión regular que pueda superar este problema?

La consulta SQL es exacta:

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

estoy usando Java. El reemplazo no funciona para mí.

+1

Necesita leer en [Inyección SQL] (http://en.wikipedia.org/wiki/SQL_injection) – Oded

+3

Vea también http://bobby-tables.com/ para detalles sobre cómo usar consultas parametrizadas en cualquier idioma que estés usando Esto lo protegerá de la inyección SQL a la que se refiere Oded. –

+1

¡Sí lo revisé y la consulta parametrizada lo hizo! Muchas gracias ! – Aashima

Respuesta

34

se puede escapar una sola cita de repetirlo:

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

Una mejor opción sería una consulta parametrizada. Por ejemplo, deberíamos conocer el idioma de su cliente.

+0

Más caracteres especiales en *** Oracle ***, no solo el _caracter_ ** '**? – Kiquenet

Cuestiones relacionadas