Подтвердить что ты не робот

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, но не работает. Почему?

4b9b3361

Ответ 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/...