ios - 多次打开sqlite数据库还是单次打开sqlite数据库?

标签 ios swift sqlite

我是 Swift 新手,正在学习使用 SQlite,我想知道在哪里打开数据库?

a) 在我需要使用的每个 ViewController 上多次

b) 打开一次并将其保留为整个应用程序的实例? -怎么做?

理论上,方案a意味着我每次要使用数据库时都会将其加载到内存中。也许我错了,但这很丑。

我可以从经验丰富的 swift 开发人员那里得到一些说明吗?

我在教程中有这样的代码,但它在 ViewController 上使用


//the database file
       let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
           .appendingPathComponent("HeroesDatabase.sqlite")

       //opening the database
       if sqlite3_open(fileURL.path, &db) != SQLITE_OK {
           print("error opening database")
       }

最佳答案

任何 View Controller 中都不应包含 SQLite 代码。您应该编写一个类来封装所有从数据库读取和向数据库写入数据的操作。然后您的其他类(例如 View Controller )根据需要请求数据并将其提交给该类。

换句话说,单个数据库类代表您的数据及其持久性。其他代码不需要知道您正在使用 SQLite。

对于您最初的问题,在应用程序的生命周期内保持单个数据库连接打开没有任何问题。我就是做这个的。并且将所有内容集中在一个类中使事情变得简单。数据库并不只是因为它是打开的而“位于内存中”。但这实际上取决于您的数据库访问量。在我的应用程序中,每个屏幕和每次点击都会导致数据库访问。所以我有一个开放的连接并充分利用准备好的语句。但如果您只是偶尔访问数据库,那么每次打开、查询和关闭都不会出现问题。打开数据库时我也有很多开销。我安装了很多自定义功能和其他设置。对每个查询都这样做会很痛苦。

关于ios - 多次打开sqlite数据库还是单次打开sqlite数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485096/

相关文章:

iOS xcode、Web 服务、NSURLConnection 第二次调用失败

ios - tableviewCell在每个单元格中都从底部截断

ios - 在 UITableView 滚动时更新 MKMapView,从单元格获取坐标

sql - LEFT OUTER JOIN with LIMIT

sqlite - 如何使用SQLite FTS3匹配表中多列中的多个文本?

ios - UITableView 中的 1 个 UISwitch 用于 4 个单元格

ios - 我是否必须对 IBInspectable 属性调整的值进行硬编码?

ios - 区分 UITableViewCell 上的单击和双击

ios - 在 api 调用 Swift 上显示事件指示器

ruby-on-rails - ROR套件安装将不会安装缺少的gem