Domanda

Ho scritto lo schema del database (finora solo una tabella) e le istruzioni INSERT per quella tabella in un file. Quindi ho creato il database come segue:

$ 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 riga 16 del mio file è simile a questa:

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

Il problema è il carattere di escape per una singola citazione. Ho anche provato a evitare due volte la singola virgoletta (usando \\\ ' invece di \' ), ma non ha funzionato neanche. Cosa sto sbagliando?

È stato utile?

Soluzione

Prova a raddoppiare le virgolette singole (molti database si aspettano così), quindi sarebbe:

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

Citazione pertinente da la documentazione :

  

Una costante di stringa si forma racchiudendo la stringa tra virgolette singole ('). Una singola virgoletta all'interno della stringa può essere codificata inserendo due virgolette singole in una riga, come in Pascal. Gli escape di tipo C che utilizzano il carattere barra rovesciata non sono supportati perché non sono SQL standard. I letterali BLOB sono letterali stringa che contengono dati esadecimali e preceduti da un singolo "x" o "X" personaggio. ... Un valore letterale può anche essere il token "NULL".

Altri suggerimenti

Credo che vorresti scappare raddoppiando la singola citazione:

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

per sostituire tutto (') nella tua stringa, usa

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

esempio:

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

Nel caso in cui si abbia un ciclo o una stringa json che è necessario inserire nel database. Prova a sostituire la stringa con una singola virgoletta. ecco la mia soluzione. esempio se hai una stringa che contiene è una virgoletta singola.

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

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

questo funziona per me in c # e java

In C # è possibile utilizzare quanto segue per sostituire la virgoletta singola con una virgoletta doppia:

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

E l'output sarà:

"St. Mary''s"

E, se lavori direttamente con Sqlite; puoi lavorare con oggetti invece che con stringhe e catturare cose speciali come DBNull:

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top