Room persistance library. Delete all
How can I delete all entries on specific table using Room Persistence Library? I need to drop table, but I cannot to find any information how to do this.
Only when database is migrating or to load all entries and delete them :)
Solution 1:
You can create a DAO method to do this.
@Dao
interface MyDao {
@Query("DELETE FROM myTableName")
public void nukeTable();
}
Solution 2:
As of Room 1.1.0
you can use clearAllTables() which:
Deletes all rows from all the tables that are registered to this database as entities().
Solution 3:
If want to delete an entry from the the table in Room simply call this function,
@Dao
public interface myDao{
@Delete
void delete(MyModel model);
}
Update: And if you want to delete complete table, call below function,
@Query("DELETE FROM MyModel")
void delete();
Note: Here MyModel is a Table Name.
Solution 4:
Use clearAllTables() with RXJava like below inorder to avoid java.lang.IllegalStateException: Cannot access database on the main thread since it may potentially lock the UI for a long period of time.
Completable.fromAction(new Action() {
@Override
public void run() throws Exception {
getRoomDatabase().clearAllTables();
}
}).subscribeOn(getSchedulerProvider().io())
.observeOn(getSchedulerProvider().ui())
.subscribe(new Action() {
@Override
public void run() throws Exception {
Log.d(TAG, "--- clearAllTables(): run() ---");
getInteractor().setUserAsLoggedOut();
getMvpView().openLoginActivity();
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d(TAG, "--- clearAllTables(): accept(Throwable throwable) ----");
Log.d(TAG, "throwable.getMessage(): "+throwable.getMessage());
}
});