Sqlite LIKE проблема в android
Привет, я потратил почти 2 часа, пытаясь понять, почему оператор LIKE не работает, и я получаю только эту ошибку: 03-03 11:31:01.770: ERROR/AndroidRuntime(11767): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x89d9f8
В SQLiteManager он работает совершенно так: SELECT Word FROM Sign WHERE Word LIKE 'he%';
Но когда я пытаюсь сделать это из java, это не сработает.
Вот мой запрос, я пробовал во многих отношениях без везения:
Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word"+" LIKE '"+" ?"+"%'", new String[]{name}, null, null, null);
Любые идеи? я делаю это неправильно или есть ошибка?
Спасибо за ваше время.
Ответы
Ответ 1
Я думаю, что вы не должны использовать selArgs для LIKE таким образом. Вы можете попробовать следующее:
Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word"+" LIKE '"+name+"%'", null, null, null, null);
EDIT:
ОК, если вы хотите быть в безопасности от SQL-инъекций, не используйте вышеуказанное решение, используйте это:
Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word LIKE '?'", new String[]{name+"%"}, null, null, null);
Ответ 2
Решение на самом деле очень просто. Просто включите% внутри вашего selectionArgs.
String []selectionArgs = {name + "%"});
Ответ 3
Вот как я это сделал:
String []columns = {"_id", "name"};
String []selectionArgs = {name+"%"};
db.query(true,"mydb",columns,"name LIKE ?",selectionArgs,null,null,null);
Ответ 4
Другое - возможно, более чистое решение - использовать оператор ||
, как описано здесь: Связывание Sqlite в строковом литерале