2012-01-31 109 views
25

我在我的NAMES表中有3個名字,Allakhazam,Beatbox和Cunning。類似Android的SQLite數據庫查詢

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; 
} 

我稱之爲有「A」的功能作爲過濾器,但我的光標返回一個0計數時,它至少應該回到我1.任何人都可以看到什麼是錯的代碼?

回答

75

如果您使用通配符,則此語句將返回keyname等於字符串所指定字符串的所有記錄,那麼您可以獲得期望的結果。如:

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

將列出以過濾器中的單詞開始的所有記錄。

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

將列出所有包含過濾詞的記錄。

+0

謝謝,這並對我來說,我看着錯誤的地方。 – Maurice 2012-01-31 09:04:17

+0

這可以幫助我很多,謝謝。 – 2013-06-21 10:54:47

+0

爲什麼我們需要在上面的代碼中爲過濾器添加%符號? @jeet – 2015-03-04 05:37:14

2

你應該給使用通配符過濾器;)

"A%" 
+0

android.database.sqlite.SQLiteException:near「%」:語法錯誤:編譯時:SELECT DISTINCT _id,nid,name FROM names WHERE name LIKE%?%當我添加「LIKE?%」時得到此錯誤 – Maurice 2012-01-31 08:49:29

+0

您需要用單引號包裝你的字符串 – rsaxvc 2013-04-10 15:44:33

3
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); 
    } 
4

你可以試試這個.....代碼.......

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); 

    } 
+2

沒有參數綁定代碼變得不安全與SQL注入漏洞 – Alfishe 2014-12-29 02:57:24

+0

對不起,我不明白。 – 2014-12-31 07:48:28

+2

我只是通過filter =「criteria%'; DROP DATABASE .....; SELECT * FROM table WHERE row LIKE'%criteria」 – Alfishe 2014-12-31 23:36:43