我一直在学习Android中引入的新架构组件中的Room DB,并考虑将我的当前数据库迁移到Room DB。
但是,我的当前数据库实现允许我向表中添加列,但根据Room的规定,POJO类中的字段代表表中的列。
如果可以使用原始查询在Room DB中添加列,那么我该如何实现呢?
我一直在学习Android中引入的新架构组件中的Room DB,并考虑将我的当前数据库迁移到Room DB。
但是,我的当前数据库实现允许我向表中添加列,但根据Room的规定,POJO类中的字段代表表中的列。
如果可以使用原始查询在Room DB中添加列,那么我该如何实现呢?
我知道这是一篇旧帖子,但这可能会帮助需要解决此问题的人。
您想在升级数据库时添加该列,还是想在首次创建表时添加该列?
如果您想在升级数据库时添加该列,则可以查看迁移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()
使用Room对于这个表没有太大意义。毕竟,您不能动态修改任何实体或DAO方法,因此Room将不知道这些更改的列。
如果您的数据库的其余部分与Room兼容,并且您只有这一个奇怪的表,则可以在RoomDatabase
上调用getOpenHelper()
以获取SupportSQLiteOpenHelper
,然后从那里开始工作。 SupportSQLite...
类类似于本机Android SQLite API。