如何使用房间持久性库删除特定表上的所有条目? 我需要删除表,但我无法找到如何做到这一点的任何信息。

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


当前回答

您可以创建一个DAO方法来做到这一点。

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

其他回答

要在不滥用@Query注释的情况下使用Room,首先使用@Query选择所有行并将它们放入列表中,例如:

@Query("SELECT * FROM your_class_table")

List`<`your_class`>` load_all_your_class();

将他的列表放到delete注释中,例如:

@Delete

void deleteAllOfYourTable(List`<`your_class`>` your_class_list);

您可以创建一个DAO方法来做到这一点。

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

如果有人在寻找删除所有的表,刷新一切在应用程序没有任何代码遵循 设备文件资源管理器-> data -> data -> com. com。YOUR_APP ->数据库 您可以删除数据库文件夹中的文件

这是我们如何从一个片段。

fun Fragment.emptyDatabase() {
    viewLifecycleOwner.lifecycleScope.launchWhenCreated {
        withContext(Dispatchers.IO) {
            Database.getInstance(requireActivity()).clearAllTables()
        }
    }
}

如果你正在从一个活动中清空数据库,请使用以下命令:

fun Activity.emptyDatabase() {
    // create a scope to access the database from a thread other than the main thread
    val scope = CoroutineScope(Dispatchers.Default)
    scope.launch {
        SitukaDatabase.getInstance(this@emptyDatabase).clearAllTables()
    }
}

也可以从主线程调用clearAllTables方法。我还没有尝试过,但我注意到Android Studio不识别调用为挂起函数。

当使用RxJava在后台执行这个任务时,我有删除所有方法的问题。这是我最终解决问题的方法:

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

and

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