首页 文章

在房间db中添加列

提问于
浏览
0

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

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

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

2 回答

  • 0

    我知道这是一个老帖子,但这可能会帮助那些需要帮助的人 .

    是否要在升级数据库时添加所述列,或者您希望在首次创建表时执行此操作?

    如果您想在升级数据库时执行此操作,那么您可以查看

    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

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

    如果您的数据库的其余部分是友好的,并且您只有这个奇怪的表,您可以在 RoomDatabase 上调用 getOpenHelper() 来获取 SupportSQLiteOpenHelper ,然后从那里开始工作 . SupportSQLite... 类类似于原生的Android SQLite API .

相关问题