#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);