2011-08-19 8 views
6

¿Cómo puedo escribir la cláusula where in en la consulta SQLite de Android?Cómo escribir la cláusula WHERE IN de una consulta dinámica de ArrayList para Android SQLite

función para recuperar un solo cliente

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

función para recuperar un más clientes

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

El tamaño de la groupId ArrayList es dinámico.

Respuesta

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

lo siento, la lista de identificación puede ser similar a (11, 103, 6, 100) –

+0

ver respuesta actualizada – Rasel

15

Puede utilizar la clase Android TextUtils unen método para hacer una lista separada por comas de ID para poner en el en la cláusula.

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

Por cierto, si groupIds es una lista de las claves principales de otra tabla que usted debe utilizar Longs para almacenarlos no enteros de lo contrario se desbordará cuando los ID consiguen grandes.

1

Quiero añadir algo en @JosephL'sanswer como por mi estudio:

tengo dos ArrayList con los siguientes valores:

Primera ArrayList (en la primera columna) tienen valores duplicados y Second ArrayList (en la segunda columna) tiene valores únicos.

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

impresión tanto después de procesar la siguiente manera:

  1. primera matriz: "(" + TextUtils.join(",", arrayList1) + ")"
  2. segunda matriz: "(" + TextUtils.join(",", arrayList2) + ")"
  3. primera matriz (eliminar duplicados utilizando new HashSet<>(arrayList1)):

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

    => Primera Matriz: (67,67,70,70)

    => segunda matriz: (35,36,41,42)

    => Primera Array (eliminar duplicados utilizando new HashSet<>(arrayList1)): (67,70)

Esperamos que se de utilidad. Gracias.

Cuestiones relacionadas