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 ステートメントを解析し、それを他のテーブルと結合する方法、使用するインデックス、およびクエリ プランになる同様の決定を決定する必要があるためです。

2番目の例のように動的にバインドされた変数は、クエリプランを変更せず、使用しても問題ありませんが、テーブル名を変更すると、SQLiteはまったく好きではありません.

テーブル名を動的に指定する必要がある場合は、コード内で SQL 文字列を動的に生成し、その文字列を SQLite に渡して、テーブル名が既に存在するようにすることができます ( としてではありません?)。

于 2013-03-06T06:16:53.793 に答える