I am using room dao from Android Components. What i need: insert list, but before - delete all Data from db whose id is different from id from the new list.
here is my simple Data class:
class Data{
String id; //unique for each data class
//some other data parameters here
}
The best option for my task is use DELETE WHERE NOT IN someArray. here is example from my code:
@Query("DELETE " +
"FROM MY_TABLE " +
"WHERE data_id NOT IN ( :listOfId )")
abstract protected fun deleteUniqueData(listOfId:String):Int
So when I receive new list that must be saved, I create next String with ids: "'0','1'" and call method deleteUniqueData.
But each time I called this, I receive 2 as result, which means that there 2 rows was deleted.
Interesting part: when I replace
"WHERE data_id NOT IN ( :listOfId )")
with
"WHERE data_id NOT IN ('0','1')") //same data but hardcoded
I receive 0 as result. So it looks like it is some problem with Room.
Any ideas why NOT IN doesn't work? Or how it can be fixed?
UPDATE
here is generated query:
"DELETE FROM MY_TABLE WHERE data_id NOT IN ( ? )"
Change
deleteUniqueData()to take a list or array of IDs as the parameter. Do not assemble the comma-delimited list yourself. Room does that.