如何将 .SQLite 正确添加到 App 的包中?

Posted

技术标签:

【中文标题】如何将 .SQLite 正确添加到 App 的包中?【英文标题】:How to add .SQLite to App's bundle properly? 【发布时间】:2017-03-21 05:38:51 【问题描述】:

本教程告诉我,我需要将 3 个文件(在 WAL 模式下)扔到包中。

https://www.appcoda.com/core-data-preload-sqlite-database/

我的应用程序使用 DELETE WAL 模式,那里只存在 1 个文件(仅限 .sqlite)。

我只是测试并将 1 个文件 (.sqlite) 扔到包中。 然后编写方法将其复制到 App 的 Document 目录。 它工作:o,文件完美复制。

但我仍然想知道 1 文件模式以后会不会让我的应用崩溃?? 我应该改用“3个文件”模式(WAL MODE)吗???

更新***

您好,非常感谢,我刚刚将 .sqlite 文件完美地复制到了 NSBundle。但是在我将文件从 Bundle 复制到 Document 目录之后。我的 PSC 无法读取 .sqlite(认为 ps 添加到 psc 完美,由 [psc persistentStores] 检查。获取的数据仍然是空的(认为我可以从 DBBrowser 看到数据存在于 .sqlite 中)。我一遍又一遍地尝试过,但是仍然没有工作(更改文件名/等)。

我的 PSC 选项是这样的。请问是这个原因吗???谢谢

 @    NSSQLitePragmasOption : @@"journal_mode":@"DELETE",
                     NSInferMappingModelAutomaticallyOption: @YES,
                      NSMigratePersistentStoresAutomaticallyOption :   @YES ;    

【问题讨论】:

正如我在对your previous question 的回答中解释的那样,您不需要创建和复制这些额外的文件。 【参考方案1】:

我假设你的意思是

删除 WAL 模式

您的数据库是否处于 DELETE 日志模式。

正如 SQLite 文档所述:

DELETE 日志模式是正常行为。在 DELETE 模式下,回滚日志在每个事务结束时被删除。实际上,删除操作是导致事务提交的操作。

关于共享内存文件,它说它只被使用

在 WAL 模式下运行时 [...]

因此,如果与数据库的最后一个连接正确关闭,您应该没问题。 如果您仍然担心,您还可以通过运行验证数据库的完整性

    PRAGMA integrity_check

    PRAGMA quick_check

就可以了。

【讨论】:

您好,非常感谢,我刚刚将 .sqlite 文件完美地复制到了 NSBundle。

以上是关于如何将 .SQLite 正确添加到 App 的包中?的主要内容,如果未能解决你的问题,请参考以下文章

我如何将数据库添加到 netbean 项目的包中

将 .java 文件导入正确的包中

将 Maven 生成的站点添加到生成的包中

如何在 python 包中添加 cv2 作为要求?

如何从用户定义的包中正确导入宏?

如何将数据集放入 R 包中