6

Android SQLiteクエリでwherein句を作成するにはどうすればよいですか?

単一の顧客を取得する機能

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

より多くの顧客を獲得する機能

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

groupIdArrayListのサイズは動的です。

4

3 に答える 3

16

Android TextUtilsクラスのjoinメソッドを使用して、in句に入れるIDのコンマ区切りリストを作成できます。

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が別のテーブルの主キーのリストである場合は、整数ではなくLongsを使用してそれらを格納する必要があります。そうしないと、IDが大きくなるとオーバーフローします。

于 2012-03-12T22:17:12.270 に答える
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);
于 2011-08-19T09:03:26.743 に答える
1

私の研究によると、 @JosephLの 回答に何かを追加したいと思います。

次の値を持つ2つのArrayListがあります。

最初のArrayList(最初の列)には重複する値があり、2番目のArrayList(2番目の列)には一意の値があります。

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

以下のように処理した後、両方を印刷します。

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

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

    =>最初の配列:(67,67,70,70)

    => 2番目の配列:(35,36,41,42)

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

お役に立てば幸いです。ありがとう。

于 2016-11-18T06:57:42.110 に答える