如何插入“进入sqlite3文本

时间:2013-11-18 06:15:36

标签: sqlite

我想插入一个字符串,比如Hello,我是“Tmacy”!,进入sqlite3表。但是我找不到插入“。(ps.I试图用\”而不是“但是它没有说话。)。注意:我使用C / C ++ API函数sqlite3_exec将字符串插入sqlite表。如果使用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");
 }

谢谢!

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

尝试重复引用而不是转义它: -

http://www.sqlite.org/faq.html#q14

答案 2 :(得分: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

如果你真的想避免使用参数,那么“”(其中两个)将是你要走的路。如果我没有使用参数,我运行所有字符串值,我通过一个函数插入到数据库中,该函数替换“with”“字符串值中的任何位置。

编辑:哦,是的,我差点忘了。对于使用参数,您的键值应该是'@FieldName',并且您的SQL查询应该在您使用该参数的任何地方说'@FieldName'。

因此,例如,如果您调用要插入“in”的字段“Name”,则插入查询会有类似的内容。

insert into dict values(@Name, @OtherField)

您可以随意调用您的参数,如果您将其命名为与加载值的字段相同,则更容易。