Room学习四:数据库迁移

2019-03-01  本文已影响2人  crossroads

前言

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框架示例网址

上一篇 下一篇

猜你喜欢

热点阅读