Pergunta

Eu escrevi o esquema de banco de dados (apenas uma mesa até agora), e as instruções INSERT para essa tabela em um arquivo. Então eu criei o banco de dados da seguinte forma:

$ 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

Linha 16 do meu arquivo é algo como isto:

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

O problema é o caractere de escape para uma única cotação. Eu também tentei dupla escapar o apóstrofo (usando \\\' vez de \'), mas isso não quer trabalhar. O que estou fazendo de errado?

Foi útil?

Solução

Tente dobrar as aspas simples (muitos bancos de dados espera-se que maneira), então seria:

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

citação relevante de a documentação :

A constante de cadeia é formada colocando a string entre aspas simples ( '). A única citação dentro da corda pode ser codificado, colocando duas aspas simples em uma linha - como em Pascal. escapes de estilo C usando a barra invertida não são suportados porque eles não são SQL padrão. literais BLOB são strings literais contendo dados hexadecimais e precedido por um único caractere "x" ou "X". ... Um valor literal também pode ser o "NULL" token.

Outras dicas

Eu acredito que você iria querer escapar dobrando o aspas simples:

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

para substituir todos ( ') na cadeia, uso

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

exemplo:

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

Apenas no caso, se você tem um loop ou uma string JSON que necessidade de inserir no banco de dados. Tente substituir a cadeia com uma única citação. aqui está a minha solução. exemplo, se você tem uma cadeia que contêm uma única citação.

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

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

Isso funciona para mim em c # e Java

Em C # você pode usar o seguinte para substituir o apóstrofo com aspas duplas:

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

E a saída será:

"St. Mary''s"

E, se você estiver trabalhando com Sqlite diretamente; você pode trabalhar com objeto em vez de corda e pegar coisas especiais como DBNull:

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top