我最近启动了一个 iOS 项目,需要使用一个独立的数据库,当有更新时,该数据库将从互联网下载。这是我的第一个 iOS 项目,因此在设计下载机制之前我试图让功能正常工作。
我选择了 SQLite 包装器 SWLite.swift
( https://github.com/stephencelis/SQLite.swift ) 并准备好我的查询和 TableView 。但我无法连接到数据库。我已经尝试了这里的几乎所有其他问题/答案,但完全没有成功。
例如,我将 SQLite 数据库放入 Assets.xcassets
并尝试过let path = Bundle.main.path(forResource: "myDb", ofType: "db")!
,并且应用程序崩溃(当我返回nil
时——大概是因为无法找到路径)。同样,我尝试了其他人的建议,包括在我的 Mac 上创建一个文件夹,将文件放入其中,附加 .bundle
到文件夹名称,然后将其放入 Assets ...再次,nil
.
有人可以建议吗?我查看了 Apple 文档,但无法真正找到我想要的内容 - 再说一次,这是我第一次,所以也许我做错了。
最佳答案
1.:获取数据库文件的有效路径
看起来您的实际主要问题是获取数据库文件的有效路径。如果数据库文件位于 Assets 中,我也找不到任何方法使其工作。因此,不要将数据库文件保存在 Assets 文件夹中,而是将其添加到当前目标的构建阶段设置中的复制捆绑资源列表中。 如果您的文件名为 myDb.db
您可以获得如下有效路径:
let dbUrl = Bundle.main.url(forResource: "myDb", withExtension: "db")!
let dbPath = dbUrl.path
2.:访问您的数据库(不复制)
现在可以访问您的数据库,而无需(手动?)复制它。只需使用已经提到的 SQLite.swift图书馆:
db = try! Connection(dbPath)
注释: 由于问题有点老了,也许在询问时无法像这样访问数据库文件。然而,它现在确实有效。我唯一还没有明确检查的是写入数据库。至少只读访问确实很有魅力。
关于ios - 如何在 iOS 中使用现有的 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44870206/