房间图书馆可以从资产文件夹复制数据库吗?

Room library can copy db from asset folder?

我在 Assets 文件夹中有一个带有预加载数据库的旧项目。该项目有 SQLiteOpenHelper implemented for database operations. But now to update app I want to move my project to Room 个数据库库。

所以我的问题是,Room 库中是否有任何可用的方法或功能,我可以在运行时在应用程序中使用预加载的 db 文件。

或者有什么方法可以先加载数据库,然后从 Room 库直接对该数据库执行查询?

Is there any method or feature available in Room library with I can use preloaded db file in app at runtime.

从 Room 2.2.0 开始,RoomDatabase.Builder 支持 createFromAsset()createFromFile() 来设置具有 pre-loaded 初始内容的数据库。有关更多信息,请参阅 the documentation

为了未来可能像我一样登陆这里寻找答案的人 - Room 最终添加了从 2.2.0-alpha01

加载资产的能力

把数据库放在assets文件夹里(也可以放在assets的子文件夹里),这样访问:

val db = Room.databaseBuilder(applicationContext, MyDatabase::class.java, "database.db")
        .createFromAsset("/databases/database.db")
        .build()

如果数据库不在子目录中,您只需输入名称即可。