使用LIKE进行Android SQLiteDatabase查询

Mau*_*ice 32 android

我的NAMES表中有3个名字,Allakhazam,Beatbox和Cunning.

public Cursor fetchNamesByConstraint(String filter) {

    mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID,
            KEY_NAME }, KEY_NAME + " LIKE ?",
            new String[] { filter }, null, null, null,
            null);

    return mCursor;
}
Run Code Online (Sandbox Code Playgroud)

我用"A"作为过滤器调用该函数,但是当它至少应该返回1时,我的光标返回0计数.任何人都可以看到代码有什么问题?

jee*_*eet 93

此语句将返回其keyname等于string指定的字符串的所有记录,如果使用通配符,则可以获得所需的结果.喜欢:

mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID,
            KEY_NAME }, KEY_NAME + " LIKE ?",
            new String[] { filter+"%" }, null, null, null,
            null);
Run Code Online (Sandbox Code Playgroud)

将列出以过滤器中的单词开头的所有记录.

mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID,
            KEY_NAME }, KEY_NAME + " LIKE ?",
            new String[] {"%"+ filter+ "%" }, null, null, null,
            null);
Run Code Online (Sandbox Code Playgroud)

将列出过滤器中包含单词的所有记录.


小智 6

    public java.util.Vector<Products> getsearch(String subcategory,String searchby)
    {
        SQLiteDatabase db=this.getReadableDatabase();

        Cursor cursor = db.query(
            TABLE_PRODUCTS, 
            new String[] { SUBCATEGORY, MAIN_CATEGORY, PRODUCT_ID, PRODUCT_NAME, BRAND, PACKAGE_SIZE, PRICE }, 
            SUBCATEGORY + " LIKE '%" + subcategory + "%'",
            null, null, null, null, null);
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以试试这个吗.....代码......

public static final String KEY_ROWID="row";
public static final String KEY_NAME="name";

public Cursor fetchNamesByConstraint(String filter) {

  Cursor cursor=mDb.query(true, DATABASE_NAMES_TABLE, null,"row LIKE '%"+filter+"%' or name LIKE '%"+filter+"%'",null, null, null, null);

  }
Run Code Online (Sandbox Code Playgroud)

  • 如果没有参数绑定代码,则由于SQL注入漏洞而变得不安全 (3认同)
  • 我将只通过filter =“ criteria%'; DROP DATABASE .....; SELECT * FROM table WHERE row LIKE'%criteria” (2认同)