När du ger en enskild sträng som whereArgs
, en enda sträng hamnar i SQL-kommandot, som om du hade skrivit detta:
... WHERE _id IN ('1,2,42')
Detta skulle jämföra varje _id
värde mot värdet '1,2,42'
, vilket naturligtvis inte fungerar.
Om du använder tre parametermarkörer och ger tre strängar i whereArgs
array, skulle du sluta med tre strängar, så här:
... WHERE _id in ('1','2','42')
Detta fungerar bara när _id
kolumn har heltalsaffinitet, vilket är sant för en kolumn som deklareras som INTEGER PRIMARY KEY, men inte i det allmänna fallet.
Androids databas-API tillåter inte att frågeparametrar har någon annan typ än sträng. När du använder heltal bör du bara infoga dem direkt (som i ianhanniballakes svar):
String whereClause = getIdColumn() + " IN (" + TextUtils.join(",", ids) + ")";