Android: SQL rawQuery с подстановочными знаками (%) - PullRequest
10 голосов
/ 09 мая 2011

У меня rawQuery() со следующей строкой sql, подобной этой:

selectionArgs = new String[] { searchString };
Cursor c = db.rawQuery("SELECT column FROM table WHERE column=?", selectionArgs);

но теперь я должен включить подстановочный знак в свой поиск, поэтому мой запрос выглядит примерно так:

ВЫБРАТЬ столбец из таблицы ГДЕ столбец LIKE 'searchstring%'

Но когда запрос содержит одинарные кавычки, выдается следующее исключение SQLite: android.database.sqlite.SQLiteException: bind or column index out of range

Как запустить rawQuery с selectionArgs внутри запроса SQL с элементами подстановки?

Ответы [ 3 ]

24 голосов
/ 09 мая 2011

Вы должны добавить % к самим selectionArgs:

selectionArgs = new String[] { searchString + "%" };
Cursor c = db.rawQuery("SELECT column FROM table WHERE column=?", selectionArgs);

Примечание: соответственно % и _ в строке searchString по-прежнему работают с подстановочными знаками!

19 голосов
/ 27 июня 2011

Платформа Sqlite автоматически помещает одинарные кавычки вокруг? характер внутренне.

String [] selectionArgs = {searchString + "%"};
Cursor c;
// Wrap the next line in try-catch
c = db.rawQuery("SELECT column FROM table WHERE like ?", selectionArgs);

Вот и все.

0 голосов
/ 17 ноября 2014

Решение Брэда Хейна и Манназа у меня не сработало, но это сработало:

String query = "SELECT column FROM table WHERE column=%s";
String q = String.format(query, "\""+searchString + "%\"");
Cursor c = db.rawQuery(q, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...