Android: SQL rawQuery с подстановочным знаком (%)

#java #android #sqlite

#java #Android #sqlite

Вопрос:

У меня возникает rawQuery() следующая строка sql, похожая на эту:

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

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

ВЫБЕРИТЕ столбец из таблицы, ГДЕ столбец ТИПА ‘searchstring%’

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

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

Ответ №1:

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

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

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

Ответ №2:

Платформа Sqlite автоматически заключает одинарные кавычки вокруг ? внутренний символ.

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

Вот и все.

Комментарии:

1. Да, но без подстановочных знаков

Ответ №3:

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

 String query = "SELECT column FROM table WHERE column=%s";
String q = String.format(query, """ searchString   "%"");
Cursor c = db.rawQuery(q, null);