В SQLite (или любой другой механизм SQL, если на то пошло) вы можете использовать параметризованные переменные только как значения для вставки, обновления или ограничения. Вы не можете использовать его в произвольных частях вашего оператора SQL вместо ключевых слов, имен таблиц или имен столбцов при использовании в качестве lvalue.
Это связано с тем, что SQLite должен анализировать ваш оператор SQL и решать, как, возможно, присоединиться к нему с другими таблицами, которые индексируют для использования и аналогичные решения, которые затем становятся планом запроса.
Динамически связанные переменные, как в вашем втором примере, не меняют план запроса и подходят для использования, но изменение имен таблиц будет - и SQLite совсем не нравится.
Если вам действительно нужно динамически указывать имя таблицы, вы можете генерировать свою строку SQL динамически в своем коде, а затем передать эту строку SQLite, чтобы имя таблицы уже было (не как ?
).
у вас есть ваше заявление? как запрос "select count (id) from?" содержит вопросительный знак, вам нужно значение bing Syntex: sqlite3_bind_text (<# sqlite3_stmt * #>, <#int#>, <#const char * #>, <#int n#>, <#void (*) (void *) #>) –