从房间数据库中删除数据

See*_*eef 5 android rx-java2 android-room

所以我试图在用户注销时完全清除我的表,但删除表似乎没有坚持,当另一个用户登录时旧数据仍然存在。我正在使用 RXJava Completables 和 Room,我的代码类似于以下内容.

                        mDbManager.deleteAllFromTable(mCompositeDisposable)
                            .doOnComplete(new Action() {
                                @Override
                                public void run() {
                                    //Finish logging out.
                                }
                            })
                            .subscribe();
Run Code Online (Sandbox Code Playgroud)

管理器中的方法看起来像

@Override
public Completable deleteAllFromTable(final CompositeDisposable compositeDisposable) {

    return Completable.fromAction(new Action() {
        @Override
        public void run() {
            mContactDao.deleteAllFromTable();
            vacuumTables(compositeDisposable);
        }
    }).subscribeOn(mSchedulerProvider.io())
            .observeOn(mSchedulerProvider.ui());
}
Run Code Online (Sandbox Code Playgroud)

Dao 中的方法看起来像

@Query("DELETE FROM table")
void deleteAllFromTable();
Run Code Online (Sandbox Code Playgroud)

我已经尝试过,没有清理数据库并将查询标记为事务,并为删除创建一个抽象方法,该方法也清理表并将其标记为事务,但数据仍然存在,并且在 doOnComplete 时删除未完成叫。我想指出的另一件事是,当从表中删除时,还有其他表的数据由外键链接,这些表也被删除。

Qas*_*sim 9

除了手动删除表中的所有记录之外,您还可以使用RoomDatabase.clearAllTables()从注册到该数据库的所有表中删除所有行的方法entities()

有关更多详细信息,请参阅此 https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.html#clearAllTables()


小智 8

在数据库中

fun clearTables() {
        GlobalScope.launch(Dispatchers.IO) {
            this@YourDataBase.clearAllTables()
        }
    }
Run Code Online (Sandbox Code Playgroud)

调用ViewModel中的函数

  YourDataBase.getInstance(mContext).clearTables()
Run Code Online (Sandbox Code Playgroud)


nis*_*tan 2

从扩展 Roomdatabase 的类中调用clearAllTables() 方法,该方法从作为Entity() 注册到该数据库的所有表中删除所有行。

检查此处的文档 https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase