Kotlin Room数据库升级

1,192 阅读1分钟
  • 首先,修改数据库版本号

  • 定义Migration
   private val MIGRATION_1_2 = object : Migration(1,2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE road_map_points add COLUMN txt_count INTEGER NOT NULL DEFAULT -1 ")
            }

        }
  • 然后在Room.databaseBuilder().addMigrations(migration)
  • 完整代码:
package com.anyun.collect.points

import android.content.Context
import android.util.Log
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
import com.anyun.collect.points.maps.TotalMap
import com.anyun.collect.points.maps.TotalMapDao
import com.anyun.collect.points.viewmodels.RoadMapPointsDao
//数据库升级需要修改版本号
@Database(entities = [RoadMapPoints::class],version = 2,exportSchema = false)
abstract class AppDataBase : RoomDatabase() {


    abstract fun getRoadMapPointsDao(): RoadMapPointsDao


    companion object{
        val TAG = AppDataBase::class.java.simpleName
        var instance:AppDataBase?=null

        private val MIGRATION_1_2 = object : Migration(1,2) {
            override fun migrate(database: SupportSQLiteDatabase) {
                database.execSQL("ALTER TABLE road_map_points add COLUMN txt_count INTEGER NOT NULL DEFAULT -1 ")
            }

        }
        fun getInstance(context: Context):AppDataBase{
            return instance?: synchronized(this){
                instance?:buildDatabase(context).also{ instance = it}
            }
        }

        private fun buildDatabase(context: Context): AppDataBase {
            return Room.databaseBuilder(context,AppDataBase::class.java,DATABASE_NAME)
                .addCallback(object :RoomDatabase.Callback(){
                    override fun onCreate(db: SupportSQLiteDatabase) {
                        super.onCreate(db)
                        Log.i(TAG,"onCreate")

                    }
                }).addMigrations(MIGRATION_1_2)
                .build()
        }
    }
    }