Lorsque vous donnez une seule chaîne comme whereArgs
, une seule chaîne se retrouve dans la commande SQL, comme si vous aviez écrit ceci :
... WHERE _id IN ('1,2,42')
Cela comparerait chaque _id
valeur par rapport à la valeur '1,2,42'
, ce qui bien sûr ne fonctionne pas.
Si vous utilisez trois marqueurs de paramètre et donnez trois chaînes dans le whereArgs
array, vous vous retrouveriez avec trois chaînes, comme ceci :
... WHERE _id in ('1','2','42')
Cela ne fonctionne que lorsque le _id
colonne a une affinité entière, ce qui est vrai pour une colonne déclarée comme INTEGER PRIMARY KEY, mais pas dans le cas général.
L'API de base de données Android n'autorise pas les paramètres de requête à n'importe quel type sauf chaîne. Lorsque vous utilisez des entiers, vous devez simplement les insérer directement (comme dans la réponse d'ianhanniballake) :
String whereClause = getIdColumn() + " IN (" + TextUtils.join(",", ids) + ")";