gpt4 book ai didi

Android Room 持久性库。删除表

转载 作者:行者123 更新时间:2023-11-29 18:33:18 39 4
gpt4 key购买 nike

我需要知道如何使用 Room Persistence 库“从表中删除”。

我已经知道我们可以使用以下方法删除所有行:

@Query("DELETE FROM table")
void deleteAll();

但是,我需要的是删除整个表。这是因为我的primary_key是自增列,所以使用前面的代码,是不休息的。

我已经在接下来的链接中阅读了有关此主题的答案:

但是,我无法相信这个库没有提供更简单的方法来做到这一点,无论出于何种原因或用途。

最佳答案

可以使用 Room 提供的迁移通过我们自己的查询更新数据库。因为我们想要对 Room 无法从代码解析(还)的数据库进行更改。我们可以删除表、重新创建它或更新它。取决于需要什么。

选项 1:迁移并保留其他数据

  1. 首先增加数据库的版本:更新@Database注解中的version参数。
  2. 像这样创建迁移:
    static final Migration MIGRATION_1_2 = new Migration(1, 2) { // From version 1 to version 2
@Override
public void migrate(SupportSQLiteDatabase database) {
// Remove the table
database.execSQL("DROP TABLE my_table"); // Use the right table name

// OR: We could update it, by using an ALTER query

// OR: If needed, we can create the table again with the required settings
// database.execSQL("CREATE TABLE IF NOT EXISTS my_table (id INTEGER, PRIMARY KEY(id), ...)")
}
};
  1. 在构建数据库时添加迁移:
    Room.databaseBuilder(context, MyDatabase.class, "mydatabase")
.addMigration(MIGRATION_1_2) // Add the migration
.build();
  1. 再次运行应用程序。如果查询正确,则迁移完成

选项 2:在丢失数据的情况下迁移

还有一个快速选项,但是数据库中的所有数据都会被清除!

这是因为使用下面的方法时数据库被重新创建。

  1. 与选项一一样,增加数据库的版本
  2. 在创建数据库时使用 .fallbackToDestructiveMigration(),如下所示:
    Room.databaseBuilder(context, MyDatabase.class, "mydatabase")
.fallbackToDestructiveMigration()
.build();
  1. 运行应用程序。它将删除旧数据库并重新创建它。 (所有早期数据都被删除)

关于Android Room 持久性库。删除表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55226859/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com