ios - 多次或单次打开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")
}
解决方案
任何视图控制器中都不应该有 SQLite 代码。您应该编写一个类来封装从/到数据库的所有数据读取和写入。然后您的其他类(例如视图控制器)根据需要请求并向该类提交数据。
换句话说,单个数据库类代表您的数据及其持久性。甚至不需要其他代码知道您正在使用 SQLite。
至于您最初的问题,在您的应用程序的整个生命周期内保持单个数据库连接处于打开状态并没有错。我就是做这个的。将所有内容都放在一个类中使其变得简单。数据库不是因为它是打开的而“在内存中”。但这实际上取决于您的数据库访问量。在我的应用程序中,每个屏幕和每次点击都会导致数据库访问。所以我有一个开放的连接并充分利用准备好的语句。但如果你只是偶尔访问数据库,那么每次打开、查询和关闭都不是问题。打开我的数据库时,我也有很多开销。我安装了许多自定义功能和其他设置。对每个查询都这样做会很痛苦。
推荐阅读
- express - 快速服务静态文件并仅通过单击链接进行身份验证
- python - 如何在 Python 中查看每个函数行的结果
- kubernetes - 在何处以及如何编辑 Kubernetes HPA 行为
- c - 指向连续二维数组内存位置问题的双指针
- python - BROWSE_FILES_DELIMITER 的 PySimpleGUI 问题
- r - 基于条件的数据帧的 Dplyr 滚动更新
- angular - 我正在尝试使用随附的代码制作过滤表,可以吗?
- ssh - SSH 密钥未受保护的 terraform ansible jenkins
- discord - 回答机器人 [discord.py]
- pandas - Python Pandas Groupby 平均值