【iOS】iOS的轻量级数据库——FMDB

ops/2024/11/18 11:51:34/

文章目录

  • 前言
  • FMDB
    • 一、特点
    • 二、关于SQLite
      • 什么是 SQLite?
    • 三、FMDB库的导入
    • 四、FMDB库的使用
      • 1. 核心类
      • 2.使用步骤
  • 总结

前言

  在完成知乎日报仿写项目时,在文章详情页进行点赞和收藏,在个人账号页面的收藏里需要展现出来,这里使用到了第三方库FMDB,这里是笔者对FMDB库的简单学习。

FMDB

  FMDB 是 iOS 平台的 SQLite 数据库框架,FMDB 以 OC 的方式封装了 SQLite 数据库的 C 语言 API,它提供了一个简单易用的API来操作SQLite数据库

SQLite是一个C语言库,提供了一个轻量级的磁盘基础的数据库,不需要一个独立的服务器进程。FMDB使得在iOS应用中使用SQLite数据库变得更加方便和高效。

一、特点

简单易用:FMDB提供了一个简洁的接口,使得执行SQL语句变得非常简单。
线程安全:FMDB支持在多个线程中使用,通过FMDatabaseQueue可以确保数据库操作的线程安全。
高性能:FMDB直接使用SQLite的核心库,提供了高性能的数据库操作。
灵活的查询:FMDB支持预编译的SQL语句,可以灵活地处理查询结果。
事务支持:FMDB支持事务处理,可以确保数据库操作的原子性。

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的编程语言。它用于执行各种数据库操作,如查询、插入、更新和删除数据。SQL 是一种标准的数据库语言,被几乎所有的关系型数据库系统所支持,包括 MySQL 和 SQLite。

二、关于SQLite

  之前提到说,FMDB 是 iOS 平台的 SQLite 数据库框架,它将SQLite数据库以OC语言封装。现在,我们简单了解一下SQLite数据库

什么是 SQLite?

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

为什么要用 SQLite?
不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite 不需要配置,这意味着不需要安装或管理。
一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
SQLite 是自给自足的,这意味着不需要任何外部的依赖。
SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。

三、FMDB库的导入

在podfile里写入代码:

pod 'FMDB'

然后在电脑终端打开项目进行命令行操作:

pod install

关于cocoapods的安装使用和podfile文件的编写格式请看之前的博客:
【iOS】Masnory的简单学习

四、FMDB库的使用

1. 核心类

FMDB 主要包含以下几个核心类:
FMDatabase:一个FMDatabase对象就代表一个单独的 SQLite 数据库,用来执行 SQL 语句。
FMResultSet:表示使用 FMDatabase 执行查询后的结果集。
FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的。

2.使用步骤

创建

- (void)createCollectData {//1.获取数据库文件的路径NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];NSString* filename = [doc stringByAppendingPathComponent: @"collectDatabase.sqlite"];NSLog(@"\nfilename = %@\n", filename);//2.创建数据库对象self.collectDatabase = [FMDatabase databaseWithPath:filename];//3.打开数据库if ([self.collectDatabase open]) {//do somethingNSLog(@"Open collectDatabase succeed!")} else {NSLog(@"Open collectionDatabase error!");}}
}

写入(不确定的参数用?来占位)

- (void)saveStoriesCollectSet {if ([self.collectDatabase open]) {for (NSString* ID in self.storiesCollectSet) {FMResultSet* resultSet = [self.collectDatabase executeQuery: @"SELECT * FROM collectDatabase WHERE idLabel = ?", ID];if (![resultSet next]) {BOOL result = [self.collectDatabase executeUpdate: @"INSERT INTO collectDatabase (idLabel) VALUES (?)", ID];if (result) {NSLog(@"Insert table succeed");} else {NSLog(@"Insert table error");}}}[self.collectDatabase close];}
}

删除

- (void)deleteCollectSetWithID:(NSString*)ID {if ([self.collectDatabase open]) {BOOL result = [self.collectDatabase executeUpdate: @"delete from collectDatabase WHERE idLabel = ?", ID];if (result) {NSLog(@"Delete succeed");} else {NSLog(@"Delete error");}}
}

上述操作使用executeUpdate:方法执行更新,至于使用executeUpdateWithFormat:等方法和执行查询操作,笔者正在学习,后续会更新博客。

总结

  FMDB 是一个非常强大的 SQLite 封装库,它简化了 SQLite 的使用,并提供了线程安全的支持,使得在 iOS 开发中进行数据库操作变得更加方便和安全。笔者只是初步对其进行了学习,后续还会对第三方库进行更深入的了解。

参考文章:
iOS-FMDB详解及使用
iOS 开发 – SQLite 重要框架 FMDB 的使用


http://www.ppmy.cn/ops/134692.html

相关文章

⾃动化运维利器 Ansible-最佳实战

Ansible-最佳实战 一、ansible调试二、优化 Ansible 执行速度2.1 设置 SSH 为长连接2.1.1 设置 ansible 配置⽂件2.1.2 建⽴⻓连接并测试 2.2 开启 pipelining2.2.1 在 ansible.cfg 配置⽂件中设置 pipelining 为 True2.2.2 配置被控主机的 /etc/sudoers 文件 2.3 设置 facts 缓…

【Istio】Istio原理

第一章 Istio原理 一、服务网格(servicemesh)1、六个时代2、服务网格定义及优缺点二、Istio1、Istio定义2、Istio安装3、Istio架构1.5版本之前1.5版本之后4、bookinfo案例架构部署5、CRD一、服务网格(servicemesh) 微服务:架构风格,职责单一,api通信 服务网格:微服务时代的…

使用真实 Elasticsearch 进行更快的集成测试

作者:来自 Elastic Piotr Przybyl 了解如何使用各种数据初始化和性能改进技术加快 Elasticsearch 的自动化集成测试速度。 在本系列的第 1 部分中,我们探讨了如何编写集成测试,让我们能够在真实的 Elasticsearch 环境中测试软件,并…

海康大华宇视视频平台EasyCVR私有化视频平台服务器选购主要参数有哪些?

在构建现代服务器和视频监控系统时,选择合适的硬件配置和关键技术是确保系统性能和稳定性的基础。服务器选购涉及到多个关键参数,这些参数直接影响到服务器的处理能力、数据存储、网络通信等多个方面。 同时,随着视频监控技术的发展&#xf…

wife_wife

进入环境后需要登录,输入几个弱口令不行 先注册一个账号,然后再进入 这有一个假的flag, 往下滑发现有一个下载wife的按钮 但是下载这个图片什么也没有 上网查了一下,用到了Javascript原型链污染攻击 用这个漏洞的前提是后端使…

10款音频剪辑工具的个人实践体验感受!!

如今,视频拍摄已不是什么遥不可及的事情了。只需要一部手机,就能随心所欲的记录下美好的瞬间。不过,由于我们对实拍的视频不满意,为了追求更美好。于是出现了音频剪辑工具。如今,市面上的音频剪辑工具数不胜数。现在我…

微服务即时通讯系统的实现(客户端)----(4)

目录 1. 单聊消息会话详细信息界面逻辑1.1 判定会话详情为单聊还是群聊1.2 获取对方好友详情1.3 删除好友 2. 选择好友界面逻辑2.1 选择联系人2.2 创建群聊会话2.3 收到群聊会话创建通知 3. 实现群聊消息会话详细信息界面当中的获取群聊成员列表4. 添加好友界面逻辑4.1 搜索用户…

Tomcat9.0的生命周期

生命周期接口 Tomcat拥有很多组件,假如在启动Tomcat时一个一个组件启动,这不仅麻烦而且容易遗漏组件,还会对后面的动态组件扩展带来麻烦。对于这个问题,Tomcat用Lifecycle管理启动、停止、关闭。 Tomcat内部架构中,S…