在Sqlite C ++中插入以下语句

时间:2014-04-09 07:16:42

标签: c++ sql sqlite

我目前正在使用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语句无效。关于我可能做错什么的任何建议?将上述内容翻译成准备好的陈述的一个例子将不胜感激

3 个答案:

答案 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)

您需要使用不同的引号。

sqlite> create temporary table foo (urn TEXT, total INTEGER);
sqlite> INSERT INTO foo VALUES(`abc`, 12);
Error: no such column: abc
sqlite> INSERT INTO foo VALUES('abc', 12);

此外,使用C ++,您最好使用更方便的API。 SQLite有tons个。 (我会使用my own)。