我一直在浏览Android中新架构组件中介绍的Room DB,并考虑将当前的数据库迁移到Room DB。
但是我当前的数据库实现允许我向表中添加列,但是根据Room,POJO类中的字段表示表的列。
可以使用原始查询在Room DB中添加列,如果是,我该如何实现它。
答案 0 :(得分:2)
我知道这是一篇过时的文章,但这可能会帮助那些需要帮助的人。
您是要在数据库升级时添加上述列,还是要在首次创建表时添加该列?
如果要在升级数据库时执行此操作,则可以查看
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。