2012-01-31 7 views
25

私の名前テーブルには、Allakhazam、Beatbox、Cunningという3つの名前があります。 LIKE付きのAndroid SQLiteDatabaseクエリ

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」を持つ関数を呼び出すが、それは、少なくとも私のコードが悪いのかを見ることができます。1.誰でも返す必要があるときに私のカーソルが0のカウントを返していますか?

答えて

75

この文は、ワイルドカードを使用する場合は、目的の結果を得ることができ、そのキー名と等しい文字列で指定されたすべてのレコードを返します。 Like:

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

Willフィルタでwordで始まるすべてのレコードをリストします。

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

Willフィルタにwordを含むすべてのレコードをリストします。

+0

おかげで、これはやりましたそれは私のために、私は間違った場所を見ていた。 – Maurice

+0

これは私を大いに助け、ありがとう。 –

+0

上記のコードで%symbolをフィルタに追加する必要があるのはなぜですか? @jeet –

2

あなたはワイルドカードでフィルタを与える必要があります;)

"A%" 
+0

android.database.sqlite.SQLiteException: "%"の近くに:構文エラー:コンパイル中:SELECT DISTINCT _id、nid、name FROM names WHERE name LIKE%?% "LIKE?%"を追加するとこのエラーが発生する – Maurice

+0

あなたの文字列を一重引用符で囲みます – rsaxvc

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

+0

で安全になりません。わかりません。 –

+2

filter = "criteria%"; DROP DATABASE .....; SELECT * FROM table WHERE row '%criteria'を渡すだけです。 – Alfishe