如何从Android SQLite查询的动态ArrayList中编写WHERE IN子句

如何从Android SQLite查询的动态ArrayList中编写WHERE IN子句,android,sqlite,where-in,Android,Sqlite,Where In,如何在Android SQLite查询中编写where in子句 函数检索单个客户 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 getCus

如何在Android SQLite查询中编写where in子句

函数检索单个客户

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);
}
公共游标getCustomers(ArrayList GroupId){
//需要从id位于(11,13,…18)的客户处申请选择id和名称;
//返回db.query(TABLE_CUSTOMERS,新字符串[]{KEY_CUSTOMER_ID,KEY_NAME},KEY_GROUP_ID+“=”+groupid,null,null,null);
}
groupId数组列表的大小是动态的。

返回db.query(TABLE_CUSTOMERS,new String[]{KEY_CUSTOMER_ID,KEY_NAME},KEY_GROUP_ID+“>=”+groupIdsLowLimit+”和“+KEY_GROUP_ID+”您可以使用class join方法创建一个逗号分隔的ID列表,将其放入in子句中

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

顺便说一句,如果GroupID是另一个表中的主键列表,则应该使用long来存储它们,而不是整数,否则当ID变大时,它将溢出。

根据我的研究,我想在中添加一些内容:

我有两个ArrayList,其值如下:

第一个ArrayList(在第一列中)具有重复的值,第二个ArrayList(在第二列中)具有唯一的值

=> 67 : 35
=> 67 : 36
=> 70 : 41
=> 70 : 42
按如下方式处理后,打印两个文件:

  • 第一个数组:
    “(“+TextUtils.join”(“,”,arrayList1)+”
  • 第二个数组:
    “(“+TextUtils.join”(“,”,arrayList2)+”
  • 第一个数组(使用
    新哈希集(arrayList1)
    删除重复项):

    “(“+TextUtils.join”(“,”,新哈希集(arrayList1))+””

    =>第一个阵列:(67,67,70,70)

    =>第二个数组:(35,36,41,42)

    =>第一个数组(使用
    新哈希集(arrayList1)
    删除重复项):(67,70)

  • 希望有用。谢谢。

    对不起,id列表可能是(11、103、6、100)