2013-03-06 3 views
0
const char* sqlstr = "select count(id) from ?"; 

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

функция возвращает ошибку, ошибка связи получена от sqlite3_errmsg(mConn); это советы near "?": syntax error Почему?Синтаксис синтаксиса sqlite рядом?

select ? from account 

будет проходить через.

+0

у вас есть ваше заявление? как запрос "select count (id) from?" содержит вопросительный знак, вам нужно значение bing Syntex: sqlite3_bind_text (<# sqlite3_stmt * #>, <#int#>, <#const char * #>, <#int n#>, <#void (*) (void *) #>) –

ответ

2

В SQLite (или любой другой механизм SQL, если на то пошло) вы можете использовать параметризованные переменные только как значения для вставки, обновления или ограничения. Вы не можете использовать его в произвольных частях вашего оператора SQL вместо ключевых слов, имен таблиц или имен столбцов при использовании в качестве lvalue.

Это связано с тем, что SQLite должен анализировать ваш оператор SQL и решать, как, возможно, присоединиться к нему с другими таблицами, которые индексируют для использования и аналогичные решения, которые затем становятся планом запроса.

Динамически связанные переменные, как в вашем втором примере, не меняют план запроса и подходят для использования, но изменение имен таблиц будет - и SQLite совсем не нравится.

Если вам действительно нужно динамически указывать имя таблицы, вы можете генерировать свою строку SQL динамически в своем коде, а затем передать эту строку SQLite, чтобы имя таблицы уже было (не как ?).

+0

Спасибо очень. –

+0

«Это связано с тем, что SQLite должен анализировать ваш SQL-запрос и решать, как присоединиться к нему с другими таблицами, которые индексируют для использования и аналогичные решения, которые затем становятся планом запроса». Зачем присоединяться к ним со столами? –

Смежные вопросы