簡體   English   中英

Android Room 數據庫遷移沒有正確處理

[英]Android Room database Migration didn't properly handle

在我的應用程序中,我使用的是 Room 數據庫。 這里為了支持離線功能,我需要使用預先填充的數據庫。

所以,我需要的是,我創建了一個帶有值的 Room 數據庫,並將該數據庫放在項目的資產文件夾中並將數據庫導入到我的本地。

現在一切正常。

現在,出於某種原因,我在本地數據庫中再添加一列(不是資產文件夾中的外部數據庫),但它給了我以下錯誤。

java.lang.IllegalStateException:遷移沒有正確處理

我還添加了遷移。

以下是我的數據庫代碼。

@Database(
entities = arrayOf(ModelCategories::class, ModelApps::class),
version = 4,
exportSchema = false)

abstract class LauncherDatabase : RoomDatabase() {

abstract fun categoriesDAO(): DAOCategories
abstract fun appsDAO(): DAOApps

companion object {
    // Singleton prevents multiple instances of database opening at the
    // same time.
    @Volatile
    private var INSTANCE: LauncherDatabase? = null

    /*
        When there is change in Databse structure new migration should be there
     */
    @JvmField
    val MIGRATION_3_2: Migration = object : Migration(3, 4) {
        override fun migrate(database: SupportSQLiteDatabase) {
        }
    }

    fun getDatabase(context: Context): LauncherDatabase {
        val tempInstance = INSTANCE
        if (tempInstance != null) {
            return tempInstance
        }
        synchronized(this) {
            val instance = Room.databaseBuilder(
                context.applicationContext,
                LauncherDatabase::class.java,
                "launcher_database"
            ).createFromAsset("databases/launcher_database.db")
                .addMigrations(LauncherDatabase.MIGRATION_3_2)
                .build()
            INSTANCE = instance
            return instance
        }
    }
}}

注意:- 外部資產數據庫的數據庫版本是 3。所以,在 Model 類中添加一列后,我將當前數據庫版本增加到 4。

提前致謝。

里面覆蓋樂趣遷移你必須寫

database.execSQL("ALTER TABLE your_table_name ADD COLUMN column_name type");

在 int 的情況下,type 將是 Integer,在 String 或自定義數據類型等的情況下,type 將是 TEXT。如果您能告訴您的列數據類型,那么我可以添加實際代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM