美文网首页
Room学习四:数据库迁移

Room学习四:数据库迁移

作者: crossroads | 来源:发表于2019-03-01 16:14 被阅读2次

前言

Room是对SQLite的封装,官方推荐使用Room。该文档来自google官方文档。该文档里的代码是kotlin。

数据库升级

val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("CREATE TABLE `Fruit` (`id` INTEGER, `name` TEXT, " +
                "PRIMARY KEY(`id`))")
    }
}

val MIGRATION_2_3 = object : Migration(2, 3) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE Book ADD COLUMN pub_year INTEGER")
    }
}

Room.databaseBuilder(applicationContext, MyDb::class.java, "database-name")
        .addMigrations(MIGRATION_1_2, MIGRATION_2_3).build()

将数据库模型导入到JSON文件中 room.schemaLocation

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation":
                             "$projectDir/schemas".toString()]
            }
        }
    }
}

如果从旧版本到新版本的迁移规则无法找到,就会触发错误,如果要避免该错误,可以使用fallbackToDestructiveMigration,这样就可以告诉Room,在找不到迁移规则时,可以破坏性重建数据库,注意这会删除所有数据库表数据。

Room.databaseBuilder(applicationContext, MyDb::class.java, "database-name")
        .fallbackToDestructiveMigration()
        .build()

fallbackToDestructiveMigrationFrom(int... startVersions): 从特定版本迁移,销毁重建

后记

至此结束,顺便贴一下google框架示例网址

相关文章

网友评论

      本文标题:Room学习四:数据库迁移

      本文链接:https://www.haomeiwen.com/subject/jriduqtx.html