Как вы используете "?" с заявлениями sqlite в методе executeQuery? - PullRequest
0 голосов
/ 23 июля 2010

Я предполагаю, что вы можете включить "?"в своем выражении sqlite, указанном в методе executeQuery, вы передаете дополнительные аргументы, соответствующие каждому «?».Но когда я применяю это на практике, результаты не соответствуют друг другу.

Этот оператор работает:

SELECT * FROM answers WHERE test_id = ? and question_id = ?

с этим методом

FMResultSet * answer = [[UIApp database] executeQuery:[Queries getTheAnswer], l, n];

Следующий оператор вызывает сбой программы, когда я включаю "?"

SELECT * FROM questions where test_id = ? ORDER BY RANDOM() LIMIT ?
FMResultSet * set = [[UIApp database] executeQuery:[Queries randomNumberOfVerses], selectedTests, numRounds];

Но работает нормально, когда я жестко кодирую значение в.

SELECT * FROM questions where test_id = 5 ORDER BY RANDOM() LIMIT ?
FMResultSet * set = [[UIApp database] executeQuery:[Queries randomNumberOfVerses], numRounds];

Есть предложения, так как я не хочу жестко кодировать значения в?Все переменные, используемые в качестве аргументов, имеют тип NSNumber *

Ответы [ 2 ]

1 голос
/ 23 июля 2010

Я не знаю iPhone или Objective C, но обычно для подготовленных операторов используются аргументы ?, а не запросы "немедленного режима".

В SQLite C API интересующие вас функции называются sqlite3_prepare*().

Если вы можете выяснить, что такое отображение Objective C для них, вы сможете добиться определенного прогресса.

Редактировать:

Я почти забыл ту часть, которая фактически отвечает на ваш вопрос ...

Получив готовое утверждение, используйте функции sqlite3_bind*(), чтобы задать значения дляпараметры запроса.

0 голосов
/ 24 сентября 2010

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

Учитывая это, я не уверен, почему ваш последний работает.Хорошо, если вы жестко закодировали аргумент LIMIT, оставляя test_id = ?, но он не должен работать, когда вы используете?за ПРЕДЕЛ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...