我目前正在使用SQlite客户端,它使用以下查询将项目添加到表中
INSERT INTO "main"."MyTable" ("urn","total") VALUES (?1,?2)
Parameters:
param 1 (text): sdsdds
param 2 (integer): 23
现在我正在将其翻译成c ++
const char *sqlInsert = "INSERT INTO main.MyTable VALUES(`abc`, 12);";
rc = sqlite3_exec(db, sqlInsert, NULL, NULL, &error);
if (rc)
{
cerr << "Error executing SQLite3 statement: " << sqlite3_errmsg(db) << endl << endl;
sqlite3_free(error);
}
else
{
cout << "Inserted a value into MyTable." << endl << endl;
}
但是,似乎插入的sqlite语句无效。关于我可能做错什么的任何建议?将上述内容翻译成准备好的陈述的一个例子将不胜感激
答案 0 :(得分:1)
尝试按以下方式更改查询字符串:
const char *sqlInsert = "INSERT INTO \"main\".\"MyTable\" (\"urn\",\"total\") VALUES('abc', 12);";
它包含初始查询中的字段列表,保留引号并修复常量字符串的引号。
答案 1 :(得分:1)
使用''
单引号引用字符串文字。 (使用` `
反引号来引用表名和列名等标识符。)
如果要将?
占位符用于文字,则可以。将sqlite3_exec()
替换为sqlite3_prepare_v2()
,然后sqlite3_bind_...()
和sqlite3_step()
。
答案 2 :(得分:0)