Pregunta

Escribí el esquema de la base de datos (solo una tabla hasta ahora) y las sentencias 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 tiene este aspecto:

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

El problema es el carácter de escape para una sola cita. También intenté duplicar la comilla simple (utilizando \\\ ' en lugar de \' ), pero eso tampoco funcionó. ¿Qué estoy haciendo mal?

¿Fue útil?

Solución

Intente duplicar 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 al encerrar la cadena entre comillas simples ('). Una comilla simple dentro de la cadena se puede codificar colocando dos comillas simples en una fila, como en Pascal. Los escapes de estilo C que usan el carácter de barra invertida no son compatibles porque no son SQL estándar. Los literales BLOB son literales de cadena que contienen datos hexadecimales y están precedidos por un solo " x " o " X " personaje. ... Un valor literal también puede ser el token " NULL " ;.

Otros consejos

Creo que querrías escapar duplicando la comilla simple:

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

para reemplazar todo (') en su cadena, use

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

ejemplo:

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

En caso de que tenga un bucle o una cadena json que necesite insertar en la base de datos. Trate de 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

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 con Sqlite directamente; puede trabajar con objetos en lugar de cadenas y capturar cosas especiales como DBNull:

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top