2011-08-19 11 views
6

Android SQLite sorgusunda nereye yazılır?Android için bir dymanic ArrayList'ten WHERE IN cümlesi nasıl yazılır SQLite sorgusu

Fonksiyon bir fazla müşteri

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 boyutu dinamiktir almak için tek bir müşteri

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

İşlevini almak için.

cevap

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

Üzgünüz, kimlik listesine benzer (11, 103, 6, 100) –

+0

bkz. – Rasel

15

Sen Android TextUtils sınıfını kullanabilirsiniz fıkrada koymak için kimliklerinin virgülle ayrılmış listesini yapmak için kullanılan yöntem katılmak.

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 sen kimlikleri büyük olsun aksi takdirde taşar değil Tamsayılar bunları saklamak için Longs kullanıyor olmalıdır başka bir tablodan birincil anahtarlar bir listesidir BTW eğer. Aşağıdaki değerlere sahip iki ArrayList sahip

:

1

benim çalışma gereği answer@JosephL's şey eklemek istiyorum

İlk ArrayList yinelenen değerleri (İlk Sütunda) ve Second ArrayList (İkinci Sütun'da) benzersiz değerlere sahiptir.

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

Baskı hem aşağıda işledikten sonra:

  1. İlk Dizisi: "(" + TextUtils.join(",", arrayList1) + ")"
  2. İkinci Dizisi: "(" + TextUtils.join(",", arrayList2) + ")"
  3. İlk Array (new HashSet<>(arrayList1) kullanarak çoğaltır çıkarın):

    (67,67,70,70)

    => İkinci Dizi: => İlk Dizi 210

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

    (35,36,41,42)

    => İlk Dizi (new HashSet<>(arrayList1) kullanarak sökün çoğaltır): (67,70)

yararlı olacaktır Umut. Teşekkürler.

İlgili konular