【问题标题】:No data in tables when copying sqlite database to ios app将sqlite数据库复制到ios应用程序时表中没有数据
【发布时间】:2014-02-24 17:05:43
【问题描述】:

我正在使用核心数据,并使用我在捆绑包中提供的 SQlite 数据库预填充它。它已经工作了一段时间,但是我刚刚编辑了数据库,当我复制它时,没有显示任何数据。所以我打开了 ios 模拟器上的数据库,在 base 中,我发现了一个 sqlitemaster 表,其中包含许多 SQL 语句,例如 CREATE TABLE...,但我想要的表不包含任何数据。

更奇怪的是,过了一会儿数据库就正常了,所有的数据都在里面。这是因为sqlitemaster表中的语句被执行了吗?

这是否发生在其他人身上?不知道是不是因为我升级到了iOS 7?如果有人能指出我正确的方向,那就太好了

【问题讨论】:

  • 当您更新数据库的预打包版本时,您通常希望删除模拟器/设备中的应用程序。否则,您的“第一次通过”逻辑不会将新数据库复制到工作目录中。
  • 是的,我已经做到了,不过我想我正在找到解决方案!
  • 你知道如何在命令行中使用sqlite3,对吧? (sqlitemaster 包含其他表的定义。它实际上不包含其他表中的任何数据。)

标签: ios sql database sqlite


【解决方案1】:

最新的 iOS Core Data SQLite 后端使用日志。您应该注意到 .shm 和 .wal 文件位于与您认为是 Core Data 的主要 sqlite 后备存储相同的目录中。这些数据最终进入主文件,但日志优化了一些使用 SQLite 配置的 Core Data 的情况。

作为开发人员,您通常从不在应用程序内部关心这一点,但如果您尝试通过实际文件检查持久化的核心数据图,则需要注意。

【讨论】:

  • 我已经设法通过使用 journal_mode: DELETE 方法来修复它。你知道是否有办法仍然使用 Wal 日记?
  • 您将不得不在导入时关闭日记功能。然后用PRAGMA wal_checkpoint重新打开它。
【解决方案2】:

我环顾四周,日记让事情变得很奇怪。找到了这个post,这表明我遇到了同样的问题。如果其他人有这个看那个帖子

【讨论】:

    猜你喜欢
    • 2013-03-07
    • 1970-01-01
    • 2012-11-17
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2013-08-03
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多