【iOS】数据持久化(四)之FMDB

2024-01-13 08:04
文章标签 数据 ios 持久 fmdb

本文主要是介绍【iOS】数据持久化(四)之FMDB,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

正如我们前面所看到的,原生SQLite API在使用时还是比较麻烦的,于是,开源社区就出现了一系列将SQLite API进行封装的库,其中FMDB的被大多数人所使用

FMDB和SQLite相比较,SQLite比较原始,操作比较复杂,使用的是C的函数对数据库进行操作,但是SQLite可控性更强,并且能够跨平台,FMDB只能在iOS开发中使用

cocoapods导入第三方库FMDB

pod 'FMDB'

参考【iOS】JSONModel的基本使用

目录

    • FMDB简介
    • FMDB基本使用
      • 打开数据库
      • 执行更新操作
      • 执行查询操作
    • 数据参数
    • 数据库队列
    • 总结


FMDB简介

FMDB是iOS开发中的一个轻量级第三方数据库框架,它以OC的方式封装了SQLite的C语言接口,省去了麻烦的C语言代码,且更加面向对象,操作方便

FMDB一般涉及以下3个核心类:

  • FMDatabase:此类的一个实例代表一个SQLite数据库,也有许多执行SQL语句的方法
  • FMResultSet(结果集):使用FMDatabase执行SQLite查询语句后的结果集
  • FMDatabaseQueue(数据库队列):用于在多线程中执行多个查询或更新,它是线程安全的

FMDB基本使用

打开数据库

_dataBase = [FMDatabase databaseWithPath: @"/Users/Username/Desktop/CS/Xcode/FMDBTest/fmDb.sqlite"];if (![_dataBase open]) {NSLog(@"打开数据库失败!");
} else {NSLog(@"%@", _dataBase.databasePath);}//其他代码
//...
[_dataBase close];
//通常打开操作完成后,需要调用close方法来关闭
  • fmDb.sqlite数据库不存在时,会自动创建

请添加图片描述

  • Path参数传入空字符串@"",会在临时目录创建一个空数据库,FMDatabase连接关闭时,数据库文件也被删除
  • 传入的参数是nil时,会在内存中创建一个临时数据库,FMDatabase连接关闭时,数据库文件会被销毁

执行更新操作

与SQLite一样,除查询以外的所有操作,都称为“更新”,包括createdropinsertupdatedelete

请添加图片描述

传入的参数为SQLite语句字符串

...表示可变数量的参数(变长参数),可以根据需要将一些额外的参数传递给方法

这里以创建表、插入数据作为示例:

BOOL result = [_dataBase executeUpdate: @"CREATE TABLE IF NOT EXISTS t_Student(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER NOT NULL, SCORE REAL)"];
if (result) {NSLog(@"创表成功");//插入操作for (int i = 0; i < 10; ++i) {NSString* name = [NSString stringWithFormat: @"jaxon-%d", arc4random_uniform(100)];//不确定的参数用?、?占位[_dataBase executeUpdate: @"INSERT INTO t_student (name, age) VALUES (?, ?)", name, @(arc4random_uniform(40))];//不确定的参数用%@、%d占位//[_dataBase executeUpdateWithFormat: @"INSERT INTO t_student (name, age) VALUES (@%, %d)", name, @(arc4random_uniform(40))];}//删除操作//[_dataBase executeUpdate: @"DROP TABLE IF EXISTS t_student"];
} else {NSLog(@"创表失败");
}

执行查询操作

请添加图片描述

只管将SQL查询语句传进去

FMResultSet* resultSet = [_dataBase executeQuery: @"SELECT * FROM t_student"];//	遍历结果集
while ([resultSet next]) {int ID = [resultSet intForColumn: @"ID"];NSString* name = [resultSet stringForColumn: @"NAME"];int age = [resultSet intForColumn: @"AGE"];NSLog(@"%d %@ %d", ID, name, age);}

运行结果:

请添加图片描述

可以看到插入操作也是成功的

数据参数

这里还有一些有关参数的小细节:

调用executeUpdate方法来将SQLite语句中?所指代的具体参数传入,通常使用变长参数来传递进去的,像这样:

NSString* sql = @"INSERT INTO t_student (name, age) VALUES (?, ?)";[_dataBase executeUpdate: sql, name, @(arc4random_uniform(40))];

变长参数的作用体现在这里

要注意的是,参数必须是NSObject的子类,所以如果有C风格的数据类型,应包装成OC风格才能使用:

//错误
//[_dataBase executeUpdate: @"INSERT INTO t_student VALUES (?)", 42];
//正确
[_dataBase executeUpdate: @"", [NSNumber numberWithInt: 42]];

数据库队列

FMDatabaseQueue涉及到保证线程安全,编者此时此刻并未学习有关线程相关知识,以后再加以了解

总结

FMDB对SQLite进行了良好的封装,使用起来非常方便,对于那些使用纯SQLite来进行数据库操作的项目,可以将其迁移到FMDB上,提高数据库相关功能维护的效率

这篇关于【iOS】数据持久化(四)之FMDB的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600756

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

解决mysql插入数据锁等待超时报错:Lock wait timeout exceeded;try restarting transaction

《解决mysql插入数据锁等待超时报错:Lockwaittimeoutexceeded;tryrestartingtransaction》:本文主要介绍解决mysql插入数据锁等待超时报... 目录报错信息解决办法1、数据库中执行如下sql2、再到 INNODB_TRX 事务表中查看总结报错信息Lock

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元