Question

J'ai écrit le schéma de base de données (une seule table à ce jour) et les instructions INSERT pour cette table dans un seul fichier. Ensuite, j'ai créé la base de données comme suit:

$ 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 ligne 16 de mon fichier ressemble à ceci:

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

Le problème est le caractère d'échappement pour un seul devis. J'ai également essayé d'échapper à la citation simple (en utilisant \\\ ' au lieu de \' ), mais cela n'a pas fonctionné non plus. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Essayez de doubler les guillemets simples (de nombreuses bases de données l’attendent de cette façon), ce serait donc:

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

Citation pertinente tirée de la documentation :

  

Une constante de chaîne est formée en la mettant entre guillemets simples ('). Un seul guillemet dans la chaîne peut être codé en mettant deux guillemets simples dans une ligne - comme en Pascal. Les échappements de style C utilisant le caractère barre oblique inversée ne sont pas pris en charge car ils ne sont pas du code SQL standard. Les littéraux BLOB sont des chaînes de caractères contenant des données hexadécimales et précédés d'un seul "x". ou " X " personnage. ... Une valeur littérale peut également être le jeton "NULL".

Autres conseils

Je crois que vous voudriez vous échapper en doublant la citation unique:

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

pour remplacer tout (') dans votre chaîne, utilisez

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

exemple:

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

Juste au cas où vous auriez une boucle ou une chaîne json à insérer dans la base de données. Essayez de remplacer la chaîne par un guillemet simple. voici ma solution. exemple si vous avez une chaîne qui contient est un guillemet simple.

String mystring = "Sample's";
String myfinalstring = mystring.replace("'","''");

 String query = "INSERT INTO "+table name+" ("+field1+") values ('"+myfinalstring+"')";

cela fonctionne pour moi en c # et java

En C #, vous pouvez utiliser ce qui suit pour remplacer la citation simple par une citation double:

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

Et le résultat sera:

"St. Mary''s"

Et si vous travaillez directement avec Sqlite; vous pouvez travailler avec object au lieu de string et attraper des choses spéciales comme DBNull:

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top