2011-08-19 11 views
6

Android SQLiteクエリでwhere節を書くにはどうしたらいいですか?WHERE IN句をAndroidのSQLiteクエリであるdymanic ArrayListから書く方法

機能は、より多くの顧客

public Cursor getCustomers(ArrayList<Integer> groupIds) { 
    // Need to apply SELECT id, name FROM customers WHERE id IN (11, 13, ...18); 
    //return db.query(TABLE_CUSTOMERS, new String[] { KEY_CUSTOMER_ID, KEY_NAME}, KEY_GROUP_ID+" = "+groupIds, null, null, null, null); 
} 

のgroupIdのArrayListのサイズが動的であるを取得するために、単一の顧客に

public Cursor getCustomers(int groupId) { 
    return db.query(TABLE_CUSTOMERS, new String[] { KEY_CUSTOMER_ID, KEY_NAME}, KEY_GROUP_ID+" = "+groupId, null, null, null, null); 
} 

機能を取得します。

答えて

4
return db.query(TABLE_CUSTOMERS, new String[] { KEY_CUSTOMER_ID, KEY_NAME }, KEY_GROUP_ID + " >=" + groupIdsLowLimit + " and " + KEY_GROUP_ID + " <=" + groupIdsUpLimit, null, null, null, null); 

String where = ""; 
for (int i = 0; i < list.size(); i++) { 
    where = where + KEY_GROUP_ID + " =" + list.get(i).toString() + ""; 
    if (i != (list.size() - 1)) 
     where = where + " or"; 
} 

return db.query(TABLE_CUSTOMERS, new String[] { KEY_CUSTOMER_ID, KEY_NAME }, where, null, null, null, null); 
+0

申し訳ありませんが、idリストは(11,103,6,100)のようになります –

+0

更新された回答を表示 – Rasel

15

あなたは中節に置くためにIDのカンマ区切りのリストを作成する方法を参加Android TextUtilsクラスを使用することができます。ところで

String selection = KEY_GROUP_ID + " IN (" + TextUtils.join(", ", groupIds) + ")"; 
return db.query(TABLE_CUSTOMERS, new String[] { KEY_CUSTOMER_ID, KEY_NAME}, selection, null, null, null, null); 

groupIdsが別の表の主キーのリストである場合、あなたは彼らにはない整数を格納するためロングスを使用しなければならないIDが大取得するときに、それ以外の場合は、オーバーフローします。

1

私は私の研究に従って@JosephL'sanswerで何かを追加したい:

私は次の値を持つ2つのArrayListのています(最初の列の)

まずArrayListの重複する値を持っており、 2番目のArrayList(2番目の列)には一意の値があります。

=> 67 : 35 
=> 67 : 36 
=> 70 : 41 
=> 70 : 42 

印刷の両方として以下の処理後:

  1. 最初の配列:"(" + TextUtils.join(",", arrayList1) + ")"
  2. 二番目の配列:"(" + TextUtils.join(",", arrayList2) + ")"
  3. 最初の配列(new HashSet<>(arrayList1)を使用して重複を削除):

    (67,67,70,70)

    =>二番目の配列:=>まずアレイ210

    "(" + TextUtils.join(",", new HashSet<>(arrayList1)) + ")"

    (35,36,41,42)

    =>最初の配列( new HashSet<>(arrayList1)を使用して重複を削除):(67,70)

希望すると便利です。ありがとう。