将表移动到新的数据库迁移 Room Android

Posted

技术标签:

【中文标题】将表移动到新的数据库迁移 Room Android【英文标题】:Move tables to a new database migration Room Android 【发布时间】:2021-06-04 22:15:16 【问题描述】:

我正在为我的数据库使用 android 中的 Room。最近我不得不为我的主数据库创建一个备用数据库,所以现在我有 2 个数据库。

abstract class FirstDatabase : RoomDatabase() 
abstract class ScondDatabase : RoomDatabase() 

我在FirstDataBase 中有一个表,我想将它复制到SecondDataBase。我知道我应该写迁移,但我不知道我应该怎么做。 这是我目前用匕首换房间的迁移:

fun provideDatabaseMigration56(): Migration 
        return object : Migration(DATABASE_VERSION_5, DATABASE_VERSION_6) 
            override fun migrate(database: SupportSQLiteDatabase) 
                database.execSQL("DROP TABLE IF EXISTS `pins`")
                
            
        
    

    fun provideDatabaseMigration45(): Migration 
        return object : Migration(DATABASE_VERSION_4, DATABASE_VERSION_5) 
            override fun migrate(database: SupportSQLiteDatabase) 
                database.execSQL("CREATE TABLE IF NOT EXISTS `pins` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `slug` TEXT NOT NULL)")
            
        
    

【问题讨论】:

【参考方案1】:

您正在寻找的是 SQLite ATTACH DATABASE 语句。这允许您将附加数据库附加到当前连接,然后运行引用两者中的表的查询。有一些详细的文档here 显示了语法:

ATTACH DATABASE file_name AS database_name;

然后,您可以运行从两个数据库中引用表的查询,但请确保在引用附加数据库中的表时,您将其引用为

database_name.table_name

而不仅仅是table_name

【讨论】:

以上是关于将表移动到新的数据库迁移 Room Android的主要内容,如果未能解决你的问题,请参考以下文章

Cassandra 将数据迁移到新服务器

Android 使用Room操作数据库进行数据库版本的升级和迁移

Android-Room 可以自动创建迁移吗?

带有更新的预填充数据库的 Android Room 迁移

Android Room 迁移未正确处理(错误的列顺序)

Android Room迁移测试:主键位置的差异导致无根据的测试失败