Это:
" SongName LIKE '%"+"=?"+"%'"
Будет выглядеть так, когда его увидит интерпретатор SQL:
" SongName LIKE '%=?%'"
И это будет соответствовать любому SongName, содержащему литерал "=?" и я не думаю, что это как то, что вы хотите.
A %
соответствует любой последовательности символов в SQL LIKE, по сути, это то же самое, что .*
в регулярном выражении; поэтому, если вы хотите соответствовать в начале, то вам не нужен ведущий %
. Кроме того, ваш ?
заполнитель должен находиться за пределами одинарных кавычек, иначе он будет интерпретироваться как буквальный знак вопроса, а не как заполнитель.
Вы хотите что-то похожее на это:
String[] a = new String[1];
a[0] = match_str + '%';
Cursor c = myDB.rawQuery("SELECT * FROM songs WHERE SongName LIKE ?", a);
Если вы хотите быть по-настоящему строгим, вам также придется избегать символов %
и _
внутри match_str
, но это оставлено в качестве упражнения для читателя.