Caractère d’échappement simple à utiliser dans une requête SQLite

J’ai écrit le schéma de firebase database (une seule table à ce jour) et les instructions INSERT pour cette table dans un fichier. Ensuite, j’ai créé la firebase database 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é de doubler le guillemet simple (en utilisant \\\' au lieu de \' ), mais cela n’a pas fonctionné non plus. Qu’est-ce que je fais mal?

Essayez de doubler les guillemets simples (beaucoup de 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 de la documentation :

Une constante de chaîne est formée en entourant la chaîne entre guillemets simples (‘). Une seule citation dans la chaîne peut être encodée en mettant deux guillemets simples dans une ligne – comme en Pascal. Les échappements de style C utilisant le caractère barre oblique inverse ne sont pas pris en charge car ils ne sont pas standard. Les littéraux BLOB sont des littéraux de chaîne contenant des données hexadécimales et précédés d’un caractère unique “x” ou “X”. … Une valeur littérale peut également être le jeton “NULL”.

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

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

Juste au cas où vous avez une chaîne ou une chaîne json qui doit être insérée dans la firebase database. Essayez de remplacer la chaîne par une seule citation. voici ma solution. Par exemple, si vous avez une chaîne contenant un seul devis.

 Ssortingng myssortingng = "Sample's"; Ssortingng myfinalssortingng = myssortingng.replace("'","''"); Ssortingng query = "INSERT INTO "+table name+" ("+field1+") values ('"+myfinalssortingng+"')"; 

cela fonctionne pour moi en c # et java

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

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

Exemple:

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

En C #, vous pouvez utiliser ce qui suit pour remplacer le guillemet simple par un guillemet double:

  ssortingng sample = "St. Mary's"; ssortingng 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 ssortingng et attraper des choses spéciales comme DBNull:

 private static ssortingng MySqlEscape(Object usSsortingng) { if (usSsortingng is DBNull) { return ""; } ssortingng sample = Convert.ToSsortingng(usSsortingng); return sample.Replace("'", "''"); }