transact query language commands sqlite sqlite3 escaping

commands - sqlite query language



Escape carácter de comilla simple para su uso en una consulta SQLite (5)

Creo que querrías escapar duplicando la comilla simple:

INSERT INTO table_name (field1, field2) VALUES (123, ''Hello there''''s'');

Escribí el esquema de la base de datos (solo una tabla hasta ahora) y las instrucciones INSERT para esa tabla en un archivo. Luego creé la base de datos de la siguiente manera:

$ sqlite3 newdatabase.db SQLite version 3.4.0 Enter ".help" for instructions sqlite> .read ./schema.sql SQL error near line 16: near "s": syntax error

La línea 16 de mi archivo se ve así:

INSERT INTO table_name (field1, field2) VALUES (123, ''Hello there/'s'');

El problema es el carácter de escape para una cita simple. También intenté escanear dos veces la comilla simple (usando ///' vez de /' ), pero eso tampoco funcionó. ¿Qué estoy haciendo mal?


En C #, puede usar lo siguiente para reemplazar la comilla simple con una comilla doble:

string sample = "St. Mary''s"; string escapedSample = sample.Replace("''", "''''");

Y la salida será:

"St. Mary''''s"

Y, si está trabajando directamente con Sqlite; puedes trabajar con objetos en lugar de cadenas y atrapar cosas especiales como DBNull:

private static string MySqlEscape(Object usString) { if (usString is DBNull) { return ""; } string sample = Convert.ToString(usString); return sample.Replace("''", "''''"); }


Intente doblar las comillas simples (muchas bases de datos lo esperan de esa manera), por lo que sería:

INSERT INTO table_name (field1, field2) VALUES (123, ''Hello there''''s'');

Cita relevante de la documentación :

Una constante de cadena se forma encerrando la cadena entre comillas simples (''). Una comilla simple dentro de la cadena se puede codificar poniendo dos comillas simples en una fila, como en Pascal. Los escaneos tipo C que usan la barra invertida no son compatibles porque no son SQL estándar. Los literales BLOB son literales de cadena que contienen datos hexadecimales y precedidos por un solo carácter "x" o "X". ... Un valor literal también puede ser el token "NULL".


Solo en caso de que tenga un bucle o una cadena json que deba insertarse en la base de datos. Intenta reemplazar la cadena con una comilla simple. aquí está mi solución. ejemplo si tiene una cadena que contiene una comilla simple.

String mystring = "Sample''s"; String myfinalstring = mystring.replace("''","''''"); String query = "INSERT INTO "+table name+" ("+field1+") values (''"+myfinalstring+"'')";

esto funciona para mí en c # y java


para reemplazar todo ('') en su cadena, use

.replace(//'/g,"''''")

ejemplo:

sample = "St. Mary''s and St. John''s"; escapedSample = sample.replace(//'/g,"''''")