不能在Android应用程序中使用like子句

say*_*an 12 sqlite android

我在android应用程序中使用sqllite开发数据库我想使用like子句ex检索sm数据:

Cursor c = myDB.query(MY_DATABASE_TABLE, null, " SongName LIKE '%"+"=?"+"%'" , 
           new String[]{match_str}, null, null,"SongHit  DESC");
Run Code Online (Sandbox Code Playgroud)

它应该给所有SongName以match_str开头,但它不起作用.为什么?

mu *_*ort 25

这个:

" SongName LIKE '%"+"=?"+"%'"
Run Code Online (Sandbox Code Playgroud)

当SQL解释器看到它时,最终会看起来像这样:

" SongName LIKE '%=?%'"
Run Code Online (Sandbox Code Playgroud)

这将匹配任何包含文字"=?"的SongName.而且我认为这不像你想要的那样.

A %匹配SQL LIKE中的任何字符序列,它与.*正则表达式中的字符串基本相同; 所以,如果你想在开始时匹配,那么你不需要领先%.此外,您的?占位符需要在单引号之外,否则它将被解释为文字问号而不是占位符.

你想要更像这样的东西:

String[] a = new String[1];
a[0]       = match_str + '%';
Cursor   c = myDB.rawQuery("SELECT * FROM songs WHERE SongName LIKE ?", a);
Run Code Online (Sandbox Code Playgroud)

如果你想要非常严格,你也必须逃避%_内部的符号match_str,但这留给读者练习.


Mar*_*oek 9

试试这个:

String[] args = new String[1];
args[0] = "%"+song+"%";
Cursor friendLike = db.rawQuery("SELECT * FROM songs WHERE SongName like ?", args);
Run Code Online (Sandbox Code Playgroud)