2013-11-18 3 views
0

Я хочу вставить строку, такую ​​как Hello, я «Tmacy»! В таблицу sqlite3. Но я не могу найти способ вставить «. (Ps.I пытался использовать «вместо», но это не слово.). Примечание. Я использую функцию API C/C++ sqlite3_exec для вставки строки в таблицу sqlite. Если вы вставляете ее с помощью команды sqlite3, она может работать.Как вставить текст в sqlite3

так:

sprintf(sqlcmd,"insert into dict values('%s','%s')",word,meaning); 
if(sqlite3_exec(data,sqlcmd,NULL,NULL,&errmsg) != SQLITE_OK){ 
    printf("insert error!:%s\n",errmsg); 
}else{ 
    printf("insert success!\n"); 
} 

Спасибо!

ответ

2

sqlite3_mprintf функция имеет форматы, такие как %Q, которые позволяют вам формат строки правильно:

char *sql = sqlite3_mprintf("INSERT INTO dict VALUES(%Q,%Q)", word, meaning); 
err = sqlite3_exec(data, sql, NULL, NULL, &errmsg); 
sqlite3_free(sql); 
+0

спасибо! – Tmacy

0

Вы бы лучше вы можете использовать параметры здесь, это безопаснее, чем просто внести небольшие изменения в текстовые строки, чтобы «и такие не вызывали сбоя». Некоторые примеры кода использования параметров в одном из моих собственных проектов, в VB .net.

Public Sub RunSQLiteCommand(ByVal CommandText As String, Optional ByVal ReadDataCommand As Boolean = False, Optional ByVal ParameterList As Hashtable = Nothing) 
      SQLcommand.Parameters.Clear() 
      SQLcommand.CommandText = CommandText 
      If ParameterList IsNot Nothing Then 
       For Each key As String In ParameterList.Keys 
        SQLcommand.Parameters.Add(New SQLite.SQLiteParameter(key, ParameterList(key))) 
       Next 
      End If 
      SQLcommand.ExecuteNonQuery() 
      If ReadDataCommand Then 
       SQLreader = SQLcommand.ExecuteReader() 
      End If 
End Sub 

Если вы действительно хотите избежать использования параметров, то, возможно, «» (два из них) - это путь. Если я никогда не использую параметры, я запускаю все строковые значения, которые я вставляю в базу данных с помощью функции, которая заменяет «на» всюду в строковом значении.

Редактировать: О да, я почти забыл. параметры, ваше ключевое значение должно быть «@FieldName», а ваш SQL-запрос должен указывать «@FieldName», где бы вы ни использовали этот параметр.

Так, например, если вы вызываете свое поле «Имя», которое вы хотите вставить, в, у вас есть что-то вроде этого для запроса вставки.

insert into dict values(@Name, @OtherField) 

Вы могли бы назвать свой параметр все, что вы хотите, это просто легче, если вы называете это то же самое, что и поле вы загружаете значение в.

+0

Спасибо, ваш ответ очень особенный! – Tmacy

Смежные вопросы