【问题标题】:Storing JSON data from the assets into the DB with Room使用 Room 将资产中的 JSON 数据存储到数据库中
【发布时间】:2020-04-28 06:24:48
【问题描述】:

我在资产中有一个很大的 JSON 文件,我想使用 Room 将它存储在数据库中。 现在,我的应用程序获取 JSON 文件并对其进行解析,生成一些包含信息的数据模型。

将它插入数据库的方法是什么?存储库是这样做的吗?我如何知道数据库是空的还是所有信息都已转储到数据库中?

提前致谢!

【问题讨论】:

标签: android android-room


【解决方案1】:

将其插入数据库的方法是什么? 在实体 DAO 中使用插入查询,例如:

@Insert
fun insertTickets(vararg tickets: Ticket)

存储库是否可以做到这一点? 这是结构或应用程序的问题。如果你有一个存储库,那么是的,存储库应该是与数据库对话的那个。

我如何知道数据库是否为空或所有信息已转储到数据库中? 要知道数据库是否为空,您必须查询所有表中的数据,要么通过发出带有 COUNT(*) 的查询,例如

@Query("SELECT COUNT(*) FROM X")
fun numberOfRecordsInX(): Long

或询问任何一行以查看是否返回了某些内容。不知道哪个可以更快:

@Query("SELECT * FROM x ORDER BY rowid LIMIT 1")
fun gimmeAnyRowInX() : EntityX

【讨论】:

  • 是的,感谢您的回答。我现在使用override fun onCreate(db: SupportSQLiteDatabase) 使用回调填充了数据库。但是现在,我遇到了一个问题:这仅在第一次访问数据库时完成(即尝试检索实体时),这意味着数据库已填充但查询永远不会返回。有没有办法在填充数据库时进行回调?或任何其他方式先显式初始化数据库,然后检索实体?
  • 如果你的初始化数据是静态的,也就是说,不会随着时间的推移而改变,你可以用它准备一个数据库,放入assets文件夹,然后在构建时用createFromAsset(ASSETS_DATABASE_NAME)导入它。如果没有,您的方法应该有效,查询应该返回。
  • 感谢@Julen 的回答。不幸的是,它没有返回,因为我看到一个返回 0 个对象的检索查询,然后预填充了数据库
  • 我将关闭这个问题并打开一个新问题,因为我认为原始请求有点不同。谢谢!
猜你喜欢
  • 2021-06-26
  • 2023-03-05
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
相关资源
最近更新 更多