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

文章目录

  • 前言
  • 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.xdnf.cn/news/18378.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode101:对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: 树中节点数目在范围…

湘潭大学软件工程算法设计与分析考试复习笔记(一)

文章目录 前言随机类(第七章)随机概述数值随机化舍伍德拉斯维加斯蒙特卡罗 模拟退火遗传人工神经网络 回溯(第五章)动态规划(第四章)后记 前言 考试还剩十一天,现在准备开始复习这门课了。好像全…

Win11专业版Docker安装、配置记录

零,系统环境配置 首先,安装Docker需要系统支持开启硬件虚拟化及Hyper-V功能,所以这里需要Win10/11的专业版,这样才能进行Docker for Windows软件安装。 1,硬件虚拟化 至于如何开启硬件虚拟化,自行百度即…

【Android】线程池的初见

引言 在Android当中根据用途分为主线程与子线程,主线程当中主要处理与界面相关的操作,子线程主要进行耗时操作。除了Thread本身以外,在Android当中还有很多扮演者线程的角色,比如AsyncTask( 底层为线程池,…

春秋云镜-2022网鼎杯

flag1 进入网站,发现是wordpress,这种一般都不会有啥直接漏洞,应该是插件漏洞,或者弱口令 fscan扫描ip 好像没扫出啥东西 wp-login进入后台 爆破密码,弱口令admin,123456,之前lazysysadmin好…

js ResizeObserver API

一、ResizeObserver 是什么 ResizeObserver 是一个浏览器提供的 JavaScript API,用于监测一个元素的大小变化。它可以帮助开发者在元素的宽度或高度发生改变时执行某些操作,比如调整布局、重新渲染内容等。 二、Resize Observer和监听resize的区别及其…

《探索Zynq MPSoC》学习笔记(三)

引言:本文简要介绍FPGA器件技术发展以及当今FPGA器件的体系架构和特性。 第二章 FPGA、Zynq和Zynq MPSoC(2) 在本章涵盖的三种器件类型中,FPGA是建立时间最长的,也是Zynq和Zynq MPSoC器件PL元件的基础。因此&#xf…

支持用户注册和登录、发布动态、点赞、评论、私信等功能的社交媒体平台创建!!!

需要整体源代码的可以在我的代码仓下载https://gitcode.com/speaking_me/social-media-platformTest.git 社交媒体平台 描述:社交媒体平台需要支持用户注册、发布动态、点赞、评论、私信等功能。 技术栈: 前端:React, Angular, Vue.js后端…

跨平台WPF框架Avalonia教程 十五

ListBox 列表框 列表框从元素源集合中显示多行元素,并允许选择单个或多个。 列表中的元素可以组合、绑定和模板化。 列表的高度会扩展以适应所有元素,除非特别设置(使用高度属性),或由容器控件设置,例如…

STL之mapset续|红黑树篇

STL之map&set续|红黑树篇 红黑树红黑树的规则红黑树的模拟实现 map&set的模拟实现封装map/set关于红黑树的复用红黑树模板参数set的const迭代器问题 红黑树 红黑树也是一种搜索二叉树,它通过颜色和规则控制树上没有一条路径会比其他路径长两倍,…

三、计算机视觉_03LeNet5及手势识别案例

1 LeNet-5基本介绍 LeNet-5是一种经典的卷积神经网络(CNN)架构,由Yann LeCun在1998年提出,用于手写数字识别,LeNet-5是卷积神经网络的开创性工作之一,它引入了卷积层、池化层和全连接层的组合,为…

【论文模型复现】深度学习、地质流体识别、交叉学科融合?什么情况,让我们来看看

文献:蓝茜茜,张逸伦,康志宏.基于深度学习的复杂储层流体性质测井识别——以车排子油田某井区为例[J].科学技术与工程,2020,20(29):11923-11930. 本文目录 一、前言二、文献阅读-基于深度学习的复杂储层流体性质测井识别2.1 摘要2.2 当前研究不足2.3 本文创新2.4 论文…

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17,本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…

Unity-Editor扩展Odin + 自定义EditorWindow记录

没有上下文,可能你不知道这是什么(关于Odin Inspector) 在写一个 Odin 插件的完整文章,卡了三天,之后会放出 使用Unity的人之中 1/10 可能会使用Editor扩展,而这之中的又1/10的 人可能会用Odin这个Editor的附加扩展 -…

FIFO系列 - FIFO使用中需要注意的若干问题

FIFO使用中需要注意的若干问题 文章目录 FIFO使用中需要注意的若干问题前言场景1:包数据FIFO设计之冗余法场景2、FIFO数据传输之流控总结前言 场景1:包数据FIFO设计之冗余法 场景:类似图像、文字等码流数据是不需要重复被访问的,因此使用FIFO进行缓存(如果需要被存储,一…

计算机毕业设计 | springboot+vue大学城水电管理系统 校园学校物业水电管理(附源码+文档)

1,绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理大学城水电管理系统的相关信息成…

5-对象的访问权限

对象的访问权限知识点 对象的分类 在数据库中,数据库的表、索引、视图、缺省值、规则、触发器等等、都可以被称为数据库对象,其中对象主要分为两类 1、模式(schema)对象:模式对象可以理解为一个存储目录、包含视图、索引、数据类型、函数和…

药方新解:Spring Boot中药实验管理系统设计

3系统分析 3.1可行性分析 通过对本中药实验管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中药实验管理系统采用SSM框架,JAVA作为开发语…

动态规划-完全背包问题——279.完全平方数

1.题目解析 题目来源 279.完全平方数——力扣 测试用例 2.算法原理 1.状态表示 完全背包问题通常都是使用一个二维数组来表示其状态,这里是 dp[i][j]:在[1,i]区间选择平方数,当此时已选择平方数的总和完全等于j时所选择的最小平方数个数 …

二叉树的层序遍历

一、题目 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,null,null,15,7}, 该二叉树层序遍历的结果是 [[3],[9,20],[15,7]] 二、解决方案 2.0 树…