在房间db中添加列

时间:2017-07-12 03:11:16

标签: android architecture lifecycle android-room

我一直在浏览Android中新架构组件中介绍的Room DB,并考虑将当前的数据库迁移到Room DB。

但是我当前的数据库实现允许我向表中添加列,但是根据Room,POJO类中的字段表示表的列。

可以使用原始查询在Room DB中添加列,如果是,我该如何实现它。

2 个答案:

答案 0 :(得分:2)

我知道这是一篇过时的文章,但这可能会帮助那些需要帮助的人。

您是要在数据库升级时添加上述列,还是要在首次创建表时添加该列?

如果要在升级数据库时执行此操作,则可以查看

Migrating Room databases

Room.databaseBuilder(getApplicationContext(), MyDb.class, "database-name")
    .addMigrations(MIGRATION_1_2, MIGRATION_2_3).build();

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, `name` TEXT, PRIMARY KEY(`id`))");
    }
};

static final Migration MIGRATION_2_3 = new Migration(2, 3) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        database.execSQL("ALTER TABLE Book ADD COLUMN pub_year INTEGER");
    }
};

如果要动态添加列,则必须获取数据库实例,然后可以尝试调用以下内容:

getDatabaseInstance().query()

答案 1 :(得分:0)

使用Room与此表没什么关系。毕竟,您无法动态修改任何实体或DAO方法,因此Room不会知道有关这些更改列的任何信息。

如果您的数据库的其他部分是友好的,并且您只有这个奇怪的表格,那么您可以在getOpenHelper()上致电RoomDatabase以获取SupportSQLiteOpenHelper,然后从那里。 SupportSQLite...类类似于原生的Android SQLite API。