0
const char* sqlstr = "select count(id) from ?";

sqlite_prepare_v2(mConn, sqlstr, -1, &smtm, NULL)

函数返回错误,错误消息来自sqlite3_errmsg(mConn);它提示near "?": syntax error 为什么?

select ? from account

将通过。

4

1 回答 1

2

在 SQLite(或任何其他 SQL 引擎)中,您只能将参数化变量用作插入、更新或约束的值。当用作左值时,不能在 SQL 语句的任意部分使用它来代替关键字、表名或列名。

这是因为 SQLite 必须解析您的 SQL 语句并决定如何将它与其他表连接,使用哪些索引以及类似的决定,然后这些决定将成为查询计划。

第二个示例中的动态绑定变量不会更改查询计划并且可以使用,但是更改表名会 - 而且 SQLite 根本不喜欢它。

如果确实需要动态提供表名,可以在代码中动态生成 SQL 字符串,然后将该字符串传递给 SQLite,这样表名就已经存在(而不是 as ?)。

于 2013-03-06T06:16:53.793 回答