2011-08-19 15 views
6

के लिए एक डायनामिक ArrayList से खंड में WHERE लिखने के लिए कैसे करें I Android SQLite क्वेरी में क्लॉज में कहां लिख सकता हूं?एंड्रॉइड SQLite क्वेरी

समारोह एक ग्राहक

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

ग्रुप ArrayList के आकार गतिशील है पुनः प्राप्त करने को पुनः प्राप्त करने।

उत्तर

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

क्षमा करें, आईडी सूची (11, 103, 6, 100) –

+0

अपडेट किया गया उत्तर देखें – Rasel

15

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

BTW अगर groupIds आप चाहता है का उपयोग करना चाहिए उन्हें नहीं पूर्णांकों स्टोर करने के लिए अन्यथा यह जब आईडी बड़े मिल अतिप्रवाह होगा एक और मेज से प्राथमिक कुंजी की एक सूची है। निम्न मानों के साथ

मैं दो ArrayList है:

1

मैं @JosephL'sanswer में कुछ जोड़ने के लिए के रूप में अपने अध्ययन के अनुसार चाहते

पहले ArrayList डुप्लिकेट मानों (पहले कॉलम में) है और दूसरा ArrayList (दूसरे कॉलम में) में अद्वितीय मान हैं।

:

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

मुद्रण दोनों के रूप में नीचे संसाधित करने के बाद:

  1. पहली सरणी: "(" + TextUtils.join(",", arrayList1) + ")"
  2. दूसरी सरणी: "(" + TextUtils.join(",", arrayList2) + ")"
  3. पहले सरणी (new HashSet<>(arrayList1) का उपयोग कर डुप्लिकेट निकालें)

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

    => सबसे पहले सरणी: (67,67,70,70)

    => दूसरी सरणी: (35,36,41,42)

    => सबसे पहले सरणी (निकालें new HashSet<>(arrayList1) का उपयोग कर डुप्लिकेट): (67,70)

आशा है कि यह उपयोगी होगा। धन्यवाद।

संबंधित मुद्दे