我在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,但这留给读者练习.
试试这个:
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)