ios - 如何在 iOS 中使用现有的 SQLite 数据库?

标签 ios swift sqlite.swift

我最近启动了一个 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/

相关文章:

swift - UICollectionViewTransitionLayout 和 contentOffset 完成

ios - 如何在点击后退按钮时显示一次 AdMob Interstitial

swift - UIButton的 Action 自动需要延迟响应

ios - 正确的变量绑定(bind)并避免使用 SQLite.swift 查询进行 SQL 注入(inject)

ios - 在哪里为使用 SwiftUI 的用户初始化 sqlite 数据库?

ios - UIPageControl 未更新,甚至值已更改

ios - 如何将触摸事件发送到 iOS 中的 superview?

iphone - UITableView 使用 plist 制作一个 pervious 和 next 按钮?

ios - (SocketIO.Swift) .connect 回调被调用但未连接到服务器

ios - Sqlite.swift 获取行值