我有一个巨大的数据库,用SQLiteOpenHelper编写。现在我们开始为我们的项目实施Room。所以,我的问题是:如何处理迁移问题?
例如,MySQLiteOpenHelper中的版本号为100。我正在尝试将一个表(以及DB中有许多其他表)迁移到Room。
我已经创建了MIGRATION_100_101 MyDatabase:RoomDatabase(@Database(version = 101)class。所以,我需要将MySQLiteOpenHelper中的版本增加到101,并确保在MySQLiteOpenHelper之前调用带迁移的MyDatabase?
还有其他方法可以在一个应用程序中同时使用SQLiteOpenHelper和RoomDatabase吗?
答案 0 :(得分:1)
AFAIK Room自行管理一个单独的数据库,并没有很好的方法来维护自定义sqliteopenhelper和房间数据库。我们所做的是我们将表的子集一次从旧的sqlite迁移到空间(基本上,无论出于何种原因需要将表连接在一起),并保留两个单独的数据库,直到所有表都被迁移。
根据您的情况,对所有事情进行一次性迁移可能会更轻松。
答案 1 :(得分:0)
唯一允许我们执行此操作的解决方案是下一个。假设当前数据库版本为X,并且我们计划迁移到X + 1版本。
getReadableDatabase/getWritableDatabase
方法,这样就可以进行表创建(方法onCreate / onUpgrade)。此SQLiteOpenHelper对象将是临时的。fallbackToDestructiveMigration
为版本X + 2创建RoomDatabase对象。这将清除所有迁移的表并重新创建它们。另外,我们需要调用getReadableDatabase/getWritableDatabase
进行创建。这个RoomDatabase对象也是临时的。fallbackToDestructiveMigration
的RoomDatabase对象。这个对象将在我们的应用程序中使用。