美文网首页
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