How to write WHERE IN clause from a dynamic ArrayList for Android SQLite query
You can use the Android TextUtils class join method to make a comma separated list of IDs to put in the in clause.
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);
BTW if groupIds is a list of primary keys from another table you should be using Longs to store them not Integers otherwise it will overflow when the IDs get large.
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);
I want to add something in @JosephL's answer as per my study:
I have two ArrayList with following values:
First ArrayList (in First Column) have duplicate values and Second ArrayList (in Second Column) has unique values.
=> 67 : 35=> 67 : 36=> 70 : 41=> 70 : 42
Printing both after processing as below:
- First Array :
"(" + TextUtils.join(",", arrayList1) + ")"
- Second Array :
"(" + TextUtils.join(",", arrayList2) + ")"
First Array (Remove Duplicates using
new HashSet<>(arrayList1)
):"(" + TextUtils.join(",", new HashSet<>(arrayList1)) + ")"
=> First Array : (67,67,70,70)
=> Second Array : (35,36,41,42)
=> First Array (Remove Duplicates using
new HashSet<>(arrayList1)
): (67,70)
Hope it will useful. Thanks.