【问题标题】:Room library can copy db from asset folder?房间库可以从资产文件夹中复制数据库吗?
【发布时间】:2018-03-17 16:02:30
【问题描述】:

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

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

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

【问题讨论】:

  • (请不要在问题中添加投票建议或评论,谢谢 - 大多数用户不感兴趣。如果需要,请将其放入 cmets)。
  • 好的,但是有些用户在这里给出了他们的嘘声,没有任何解释。
  • 它发生了。 Meta 长期以来一直认为:用户可以出于他们喜欢的任何原因投票,无论是向上还是向下,匿名或不选择,只要他们不连续投票单用户.

标签: android android-sqlite android-room


【解决方案1】:

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

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

【讨论】:

  • 我没有使用房间图书馆,但感谢您的解决方案。我将使用 DbFlow。
  • 您是否介意更新您的答案以反映更新后的 API,如下面的评论中所述。有些人可能只阅读了您接受的答案,并认为这就是 Room 的当前状态。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2014-01-02
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多