在Room数据库中添加列

4

我一直在学习Android中引入的新架构组件中的Room DB,并考虑将我的当前数据库迁移到Room DB。

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

如果可以使用原始查询在Room DB中添加列,那么我该如何实现呢?


你使用的是哪个数据库?是SQLite吗? - Arnav Rao
是的,我正在使用SQLite。 - Amit Bhandari
2个回答

8

我知道这是一篇旧帖子,但这可能会帮助需要解决此问题的人。

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

如果您想在升级数据库时添加该列,则可以查看迁移Room数据库


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

使用Room对于这个表没有太大意义。毕竟,您不能动态修改任何实体或DAO方法,因此Room将不知道这些更改的列。

如果您的数据库的其余部分与Room兼容,并且您只有这一个奇怪的表,则可以在RoomDatabase上调用getOpenHelper()以获取SupportSQLiteOpenHelper,然后从那里开始工作。 SupportSQLite...类类似于本机Android SQLite API。


谢谢@CommonsWare,我会看看我能做什么。 - Amit Bhandari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接