首页 文章

房间坚持图书馆 . 删除所有

提问于
浏览
99

如何使用Room Persistence Library删除特定表上的所有条目?我需要删除表,但我无法找到任何信息如何执行此操作 .

仅在数据库迁移或加载所有条目并删除它们时:)

6 回答

  • 12

    结合Dick Lucas所说的并从其他StackOverFlow帖子添加重置自动增量,我认为这可以工作:

    fun clearAndResetAllTables(): Boolean {
            val db = db ?: return false
    
            // reset all auto-incrementalValues
            val query = SimpleSQLiteQuery("DELETE FROM sqlite_sequence")
    
            db.beginTransaction()
            return try {
                db.clearAllTables()
                db.query(query)
                db.setTransactionSuccessful()
                true
            } catch (e: Exception){
                false
            } finally {
                db.endTransaction()
            }
        }
    
  • 0

    您可以创建一个DAO方法来执行此操作 .

    @Dao 
    interface MyDao {
        @Query("DELETE FROM myTableName")
        public void nukeTable();
    }
    
  • 48

    从Room 1.1.0 开始,您可以使用clearAllTables(),其中:

    从作为entities()注册到此数据库的所有表中删除所有行 .

  • 3

    如果要从Room中的表中删除条目,只需调用此函数,

    @Dao
    public interface myDao{
        @Delete
        void delete(MyModel model);
    }
    

    Update: 如果要删除完整的表格,请调用以下功能,

    @Query("DELETE FROM MyModel")
      void delete();
    

    Note: 此处 MyModel 是表名 .

  • 1

    使用clearAllTables()与RXJava如下,以避免 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());
    
    
                    }
                });
    
  • 259

    使用 RxJava 在后台执行此任务时,我遇到了删除所有方法的问题 . 这就是我最终解决它的方式:

    @Dao
    interface UserDao {
        @Query("DELETE FROM User")
        fun deleteAll()
    }
    

    fun deleteAllUsers() {
        return Maybe.fromAction(userDao::deleteAll)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe ({
                d("database rows cleared: $it")
            }, {
                e(it)
            }).addTo(compositeDisposable)
    }
    

相关问题