Android Room持久性库。掉落表

问题描述 投票:0回答:2

我需要知道如何使用Room Persistence Library“DROP FROM Table”。

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

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

但是,我需要的是删除整个表格。这是因为我的primary_key是一个自动增量列,因此使用前面的代码,它不会被休息。

我已在下一个链接中阅读有关此主题的答案:

但是,我无法相信这个库无法提供更简单的方法,无论原因或用途如何。

android android-room android-library
2个回答
2
投票

可以使用Room提供的迁移来通过我们自己的查询更新数据库。因为我们想要对代码中尚未解析的数据库进行更改。我们可以删除表,重新创建或更新它。根据需要而定。

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

  1. 首先增加数据库的版本:更新version注释中的@Database参数。
  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. 与选项一一样,增加数据库的version
  2. 在创建数据库时使用.fallbackToDestructiveMigration(),如下所示:
    Room.databaseBuilder(context, MyDatabase.class, "mydatabase")
        .fallbackToDestructiveMigration()
        .build();
  1. 运行应用程序。它将删除旧数据库并重新创建它。 (所有早期数据都被擦除)

0
投票

嗯,不确定,但你可以尝试删除与此类表相关的Dao和Entity类

© www.soinside.com 2019 - 2024. All rights reserved.