Cant использовать как предложение в приложении для Android
Я работаю над базой данных с sqllite в приложении для Android
Я хочу получить данные sm с помощью подобной статьи
ex:
Cursor c = myDB.query(MY_DATABASE_TABLE, null, " SongName LIKE '%"+"=?"+"%'" ,
new String[]{match_str}, null, null,"SongHit DESC");
Он должен дать все SongName, начиная с match_str, но не работает. Почему?
Ответы
Ответ 1
Это:
" 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
, но это оставлено как упражнение для читателя.
Ответ 2
Попробуйте следующее:
String[] args = new String[1];
args[0] = "%"+song+"%";
Cursor friendLike = db.rawQuery("SELECT * FROM songs WHERE SongName like ?", args);
Ответ 3
Нет необходимости в знаке равенства, и вы должны иметь возможность включить? прямо в строке без необходимости для оператора+. Предложение where должно быть просто:
"SongName LIKE '%?%'"
и если mu слишком короткий, это правильно, и вы хотите только начать с...
"SongName LIKE '?%'"
Ответ 4
Привет Вы получаете какое-либо исключение при выполнении вышеуказанного запроса. Попробуйте удалить символ "=" напротив знака вопроса в подобном состоянии. Попробуйте использовать
db.rawQuery(sql, selectionArgs)
Ответ 5
Это отлично работает для меня...
"Songname LIKE ? "...
cursor = database.rawQuery(query, new String[]{"%" + searchTerm + "%"});
Ответ 6
Если вы хотите использовать query()
вместо rawQuery()
, вы можете сделать это так:
// searchString is the string to search for
final String whereClause = "MyColumnName" + " like ?";
String[] whereArgs = new String[]{"%" + searchString + "%"};
Cursor cursor = sqLiteDatabase.query("MyTableName",
null, // columns
whereClause, // selection
whereArgs, // selectionArgs
null, // groupBy
null, // having
null, // orderBy
null); // limit
Ответ 7
простым способом является использование оператора конкатенации ||
"SongName LIKE '%'||?||'%'"
поэтому нет необходимости редактировать match_str.
Cursor c = myDB.query(MY_DATABASE_TABLE, null, " SongName LIKE '%'||?||'%'" ,
new String[]{match_str}, null, null,"SongHit DESC");
из fooobar.com/info/430731/...