Android Room数据库升级

一、数据库升级

数据库升级在每一个版本上新的时候会经常遇到,一般是表字段进行了修改。一般新增一些字段的情况比较多。以下四步是完成数据库升级的基本步骤。

二、代码实现

1、添加Entity字段
原Entity

@PrimaryKey
var id: Int,
var name: String,
var gender: Int

添加一个String类型的字段:

@Entity
data class User(
    @PrimaryKey(autoGenerate = true)
    var id: Int,
    var name: String?,
    var gender: Int,
    var hobby:String?
)

2、修改AppDataBase的版本号
原来的版本号:

@Database(entities = [User::class], version = 1)

修改后的版本号:

 @Database(entities = [User::class], version = 2)

注意:version的版本号要和下面提到的MIGRATION要对应上!

3、添加MIGRATION
添加一个MIGRATION,并且添加上修改数据库表字段的sql代码:

private val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE User ADD COLUMN hobby TEXT")
    }
}

注意: Migration(1, 2)代表数据库版本从1升级到2,和前一步修改数据库版本对应。

4、将添加的MIGRATION添加到数据构造中去

fun getInstance(context: Context): AppDataBase {
      if (instance == null) {
          synchronized(AppDataBase::class.java) {
              instance = Room.databaseBuilder(
                  context.applicationContext,
                  AppDataBase::class.java,
                  "app_db"
              )
              // MIGRATION添加到这里
              .addMigrations(MIGRATION_1_2)
              .allowMainThreadQueries()
              .build()
          }
      }
      return instance!!
  }

  // MIGRATION
  private val MIGRATION_1_2 = object : Migration(2, 3) {
      override fun migrate(database: SupportSQLiteDatabase) {
          database.execSQL("ALTER TABLE User ADD COLUMN hobby TEXT")
      }
  }

如果有多个MIGRATION则往后添加:

 .addMigrations(MIGRATION_1_2, MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值