Frage

Ich schrieb das Datenbankschema (nur eine Tabelle so weit) und die INSERT-Anweisungen für die Tabelle in einer Datei. Dann habe ich die Datenbank wie folgt:

$ 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

Zeile 16 meiner Datei etwa wie folgt aussieht:

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

Das Problem ist das Escape-Zeichen für ein Apostroph. Ich habe auch versucht, die doppelte Apostroph Flucht (mit \\\' statt \'), aber das hat nicht funktioniert entweder. Was mache ich falsch?

War es hilfreich?

Lösung

Versuchen Sie, die einfachen Anführungszeichen verdoppeln (viele Datenbanken es erwarten, dass Art und Weise), so wäre es:

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

Relevante Zitat von der Dokumentation :

  

Ein String-Konstante wird durch Einschließen der Zeichenfolge in einfachen Anführungszeichen ( ') gebildet wird. Ein Apostroph innerhalb der Zeichenfolge kann, indem sie zwei einfache Anführungszeichen in einer Reihe codiert werden - wie in Pascal. C-Stil entkommt den umgekehrten Schrägstrich verwenden, werden nicht unterstützt, da sie SQL nicht Standard sind. BLOB Literalen sind Stringliterale durch einen einzigen „x“ hexadezimale Daten und voran enthalten oder „X“ -Zeichen. ... Ein wörtlicher Wert kann auch das Token „NULL“ sein.

Andere Tipps

Ich glaube, Sie würden durch entfliehen wollen das Apostroph Verdoppelung:

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

für alle in der Zeichenfolge ersetzen ( '), verwendet

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

Beispiel:

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

Nur für den Fall, wenn Sie eine Schleife oder eine JSON-Zeichenfolge, die in der Datenbank einfügen müssen. Versuchen Sie, die Zeichenfolge mit einem einfachen Anführungszeichen zu ersetzen. hier ist meine Lösung. Beispiel, wenn Sie eine Zeichenfolge, die ein Apostroph enthalten.

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

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

Dies funktioniert für mich in C # und Java

In C # können Sie Folgendes verwenden, um die Apostroph mit einem doppelten Anführungszeichen zu ersetzen:

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

Und die Ausgabe wird sein:

"St. Mary''s"

Und wenn Sie mit SQLite direkt arbeiten; Sie können anstelle von String mit dem Objekt arbeiten und spezielle Dinge wie DBNull fangen:

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top