我一直在浏览Android中新架构组件中引入的Room DB,并考虑将我当前的数据库迁移到Room DB .
但是我当前的数据库实现允许我向表中添加列,但是根据Room,POJO类中的字段表示表的列 .
可以使用原始查询在Room DB中添加列,如果是,我该如何实现它 .
我知道这是一个老帖子,但这可能会帮助那些需要帮助的人 .
是否要在升级数据库时添加所述列,或者您希望在首次创建表时执行此操作?
如果您想在升级数据库时执行此操作,那么您可以查看
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()
使用Room与此表没什么关系 . 毕竟,您无法动态修改任何实体或DAO方法,因此Room不会知道有关这些已更改列的任何信息 .
如果您的数据库的其余部分是友好的,并且您只有这个奇怪的表,您可以在 RoomDatabase 上调用 getOpenHelper() 来获取 SupportSQLiteOpenHelper ,然后从那里开始工作 . SupportSQLite... 类类似于原生的Android SQLite API .
RoomDatabase
getOpenHelper()
SupportSQLiteOpenHelper
SupportSQLite...
2 回答
我知道这是一个老帖子,但这可能会帮助那些需要帮助的人 .
是否要在升级数据库时添加所述列,或者您希望在首次创建表时执行此操作?
如果您想在升级数据库时执行此操作,那么您可以查看
Migrating Room databases
如果要动态添加列,则必须获取数据库的实例,然后可以尝试调用以下内容:
使用Room与此表没什么关系 . 毕竟,您无法动态修改任何实体或DAO方法,因此Room不会知道有关这些已更改列的任何信息 .
如果您的数据库的其余部分是友好的,并且您只有这个奇怪的表,您可以在
RoomDatabase
上调用getOpenHelper()
来获取SupportSQLiteOpenHelper
,然后从那里开始工作 .SupportSQLite...
类类似于原生的Android SQLite API .