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

Was*_*mon 5 android android-sqlite android-room

我在资产文件夹中有预加载数据库的旧项目。该项目实现了SQLiteOpenHelper用于数据库操作。但现在要更新应用程序,我想将我的项目移动到Room数据库。

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

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

Com*_*are 8

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

从 Room 2.2.0 开始,RoomDatabase.Builder支持createFromAsset()createFromFile()设置具有预加载初始内容的数据库。请参阅文档了解更多信息。

  • 您介意更新您的答案以反映更新后的 API,如我在下面的评论中所述。有些人可能只阅读了您接受的答案,并认为这就是 Room 的当前状态。 (2认同)

Cha*_*apz 8

对于未来可能像我一样登陆这里寻找答案的人 - Room 最终添加了从2.2.0-alpha01开始加载资产的功能

只需将数据库放在资产文件夹中(也可以放在资产的子文件夹中)并像这样访问它:

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

如果数据库不在子目录中,则只需输入名称即可,无需任何其他路径。