ROOM数据库框架迁移指北
ROOM数据库迁移,是当业务逻辑发生变化时,导致Entity实体的类、结构或索引需要变更时,对数据库的修改操作。
每次操作需要对数据库的版本号+1,对于不重要的数据库,可以直接升级版本号,进行破坏性更新;破坏性更新会清空数据库,使用破坏性更新之前一定要再三斟酌。
迁移步骤
- 添加或修改Entity实体类,确保类上已标记@Entity注解,根据业务需求添加主键及索引信息。
- 在
RoomDatabase
的实现类上注册该实体类,并将版本号+1。 - 编写对应版本的
Migration
类,并通过addMigrations
方法注册到Room.databaseBuilder()
的调用链中。
- 注:以下汉字需要被替换成对应的英文名称,
[]
内的为可选参数
添加新表
CREATE TABLE IF NOT EXISTS `表名` (`字段1` 类型 [NOT NULL] [DEFAULT 默认值]...), PRIMARY KEY(`字段名`...)
添加可空字段
ALTER TABLE `表名` ADD COLUMN `新字段名` 类型
添加非空字段
因为添加非空字段会导致旧数据无法正确获取新字段的值,所以只能把旧表重命名,然后新建一张表,再将旧数据复制过去,最后删除掉旧的表
ALTER TABLE `表名` RENAME TO `temp`
CREATE TABLE IF NOT EXISTS `表名` (`字段1` 类型 [NOT NULL] [DEFAULT 默认值], `新字段名` 类型 [NOT NULL] [DEFAULT 默认值]...), PRIMARY KEY(`字段名`...)
INSERT INTO `表名` (`字段1`, `新字段名`...) SELECT (`字段1`, 默认值...) FROM `Temp`
DROP TABLE `temp`
添加索引
CREATE INDEX IF NOT EXISTS `index_表名_字段名` ON `表名` (`字段名`)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END