Экранирование одинарной кавычки для использования в запросе SQLite

StackOverflow https://stackoverflow.com/questions/603572

  •  03-07-2019
  •  | 
  •  

Вопрос

Я написал схему базы данных (пока только одну таблицу) и операторы INSERT для этой таблицы в одном файле.Затем я создал базу данных следующим образом:

$ 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

Строка 16 моего файла выглядит примерно так:

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

Проблема в escape-символе для одиночной кавычки.Я также попробовал двойное экранирование одинарной кавычки (используя \\\' вместо \'), но это тоже не сработало.Что я делаю не так?

Это было полезно?

Решение

Попробуйте удвоить одинарные кавычки (многие базы данных ожидают именно этого), так что это будет:

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

Соответствующая цитата из документация:

Строковая константа формируется путем заключения строки в одинарные кавычки (').Одинарную кавычку внутри строки можно закодировать, поставив две одинарные кавычки подряд, как в Паскале.Экранирующие символы в стиле C с использованием символа обратной косой черты не поддерживаются, поскольку они не являются стандартным SQL.Литералы BLOB — это строковые литералы, содержащие шестнадцатеричные данные, которым предшествует один символ «x» или «X»....Литеральным значением также может быть токен «NULL».

Другие советы

Я считаю, что вы захотите уйти, удвоив одинарную кавычку:

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

для замены всех (') в вашей строке используйте

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

пример:

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

На всякий случай, если у вас есть цикл или строка json, которую нужно вставить в базу данных.Попробуйте заменить строку одинарной кавычкой.вот мое решение.пример, если у вас есть строка, содержащая одинарную кавычку.

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

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

это работает для меня в С# и Java

В C# вы можете использовать следующее, чтобы заменить одинарную кавычку двойной:

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

И вывод будет:

"St. Mary''s"

И если вы работаете с Sqlite напрямую;вы можете работать с объектом вместо строки и ловить специальные вещи, такие как DBNull:

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top