任何的开发都或多或少的接触到数据库,而在IOS中一般使用的是SQLite数据库,这是一个轻量功能较为不错的数据库.而现在用到比较多的第三方数据库操作框架就是FMDB.废话不多说,相信查找到这篇文章的都是已经上手的IOS开发者,直接上一些相关使用.

提供git地址点击这里.

首先简单介绍下

实现客户端数据库操作的第三方框架.

操作数据库的类 : FMDatabase.h

队列调度数据库执行的类 : FMDatabaseQueue.h

查询数据的类 : FMResultSet.h

注意

第三方的官方文档是这么说的:

FMDatabaseQueue - If you're wanting to perform queries and updates on multiple threads, you'll want to use this class. It's described in the "Thread Safety" section below.

翻译:如果你像去实现查找和更新在多线程上,你就是用这个类,这个是建立在线程安全之上的.

做法:一般自行封装成一个工具类,设计成单例.

目的:全局只有一个串行队列,这样操作数据库更加安全.

先创建.h文件
@interface FMDatabaseQueueManager : FMDatabaseQueue
//提供单例入口
+ (instancetype)sharedManager;
@end
在.m文件中实现方法,创建一个数据库
+(instancetype)sharedManager{
static FMDatabaseQueueManager *instance; static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 1.获取数据库路径,将要把数据库存到这个路径中.
NSString *SQLPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"my.db"];
// 2. 创建管理数据库对象
instance = [FMDatabaseQueueManager databaseQueueWithPath:SQLPath];
}); return instance;
}
新建表
  [[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) {
BOOL isCreate = [db executeUpdate:@"create table if not exists t_person(id integer primary key,name text not null,age integer);"];
使用事务插入数据
// 1.定义SQL语句
NSString *insertSQL = @"insert into t_person(name,age) values(?,?);"; // 2.队列调度数据库,使用事务插入数据,性能比原生SQLite3要好
[[FMDatabaseQueueManager sharedManager] inTransaction:^(FMDatabase *db, BOOL *rollback) { // 3.循环新增大批量的数据
for (NSInteger i = 0; i < 1000; i++) { // 4.执行SQL
BOOL isOK = [db executeUpdate:insertSQL,@"张三",@(100)]; // 出错就回滚
if (!isOK) {
// 回滚快照
*rollback = YES;
// 非常重要
break;
}
}
}];
查询数据
// 1.定义SQL语句
NSString *updateSQL = @"select name,age from t_person;"; // 2.队列调度数据库
[[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) { // 3.执行SQL
FMResultSet *resultSet = [db executeQuery:updateSQL];
// 4.逐条取记录
while ([resultSet next]) { NSString *name = [resultSet stringForColumn:@"name"];
int age = [resultSet intForColumn:@"age"]; NSLog(@"%@ -- %d",name,age);
}
}];
删除数据
// 1.定义SQL语句
NSString *updateSQL = @"delete from t_person where id = ?;"; // 2.队列调度数据库
[[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) { // 3.执行SQL
BOOL isOK = [db executeUpdate:updateSQL,@(6)];
if (isOK) {
NSLog(@"删除数据成功");
} else {
NSLog(@"删除数据失败");
}
}];
修改数据
// 1.定义SQL语句
NSString *updateSQL = @"update t_person set name = ?,age = ? where id = ?;"; // 2.队列调度数据库
[[FMDatabaseQueueManager sharedManager] inDatabase:^(FMDatabase *db) { // 3.执行SQL
BOOL isOK = [db executeUpdate:updateSQL,@"王五",@(19),@(3)];
if (isOK) {
NSLog(@"更新数据成功");
} else {
NSLog(@"更新数据失败");
} NSLog(@"影响行数 %d", db.changes);
}];

iOS | FMDB快速上手的更多相关文章

  1. [Android开发学iOS系列] 快速上手UIKit

    快速上手iOS UIKit UIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持. 按照前面的介绍, 用U ...

  2. 快速上手Unity原生Json库

    现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...

  3. Objective-C快速上手

    最近在开发iOS程序,这篇博文的内容是刚学习Objective-C时做的笔记,力图达到用最短的时间了解OC并使用OC.Objective-C是OS X 和 iOS平台上面的主要编程语言,它是C语言的超 ...

  4. 快速上手 Kotlin 的 11 招

    本文转载自 Kotlin 公众号(KotlinX) 作者:bennyhuo 最近经常会收到一些 "用 Kotlin 怎么写" 的问题,作为有经验的程序员,我们已经掌握了一门或者多门 ...

  5. Airtest 快速上手教程

    一.Airtest 简介: AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和App. 自动化脚本录制.一键回放.报告查看,轻而易举实现自动化测试流程 支持基于图像识别的 Airt ...

  6. Mac快速上手指南

    上周刚入手了2017版MacBookPro,预装macOS High Sierra.第一次接触Mac系统,经过一周的使用,简单总结下与Windows相比最常用的功能,快速上手. 1.Mac键盘实现Ho ...

  7. 几个小实践带你快速上手MindSpore

    摘要:本文将带大家通过几个小实践快速上手MindSpore,其中包括MindSpore端边云统一格式及华为智慧终端背后的黑科技. MindSpore介绍 MindSpore是一种适用于端边云场景的新型 ...

  8. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  9. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手

    原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...

随机推荐

  1. c# 快速修改图片颜色

    public static void ChangeColour(this Bitmap bmp, byte inColourR, byte inColourG, byte inColourB, byt ...

  2. Hadoop2.x伪分模式部署

    hadoop伪分布模式,只有一个节点,通常用来做测试. 一.环境准备 Linux网络配置已完成,可参见CentOS7网络配置: yum源成功挂载,可参见CentOS7本地yum源挂载: Linux已安 ...

  3. 阿里巴巴国际站 网站和PC客户端都登录不了,其他电脑或手机可以

    背景 昨天晚上,我还能打开阿里巴巴国际站,PC客户端也可以登录 今天早上起床打开电脑,发现国际站的网站打开不了,客户端也登录不了,提示了错误信息,但是其他电脑或手机就可以登录 原因分析 1.是不是本机 ...

  4. 一般处理程序、ASP.NET和MVC的区别

    这个问题说起来,我有点惭愧 想当初在大学里学的就是ASP.NET WebForms 在实习期间也是用的WebForms来开发网站,然后就觉得.NET开发网站就是用这个开发模式 现在想想都想笑...实在 ...

  5. 深入理解读写锁—ReadWriteLock源码分析

    转载:https://blog.csdn.net/qq_19431333/article/details/70568478 ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁.读锁可以在 ...

  6. 超级简单的jQuery纯手写五星评分效果

    超级简单的评分功能,分为四个步骤轻松搞定: 第一步: 引入jquery文件:这里我用百度CDN的jquery: <script src="http://apps.bdimg.com/l ...

  7. drupal 学习思路

    我之前没有学习过框架,用过一个简单的cms.php工作经验有大半年.独立项目经验为0.5.目前在用drupal,用了有三个月,主要是用drupal写app的后台管理和api接口.公司在drupal的基 ...

  8. js实现手风琴效果

    之前在慕课网上有练习手风琴效果,但是老师使用jquery简简单单的两三行实现了,今天自己用js练习一下效果 <div id="divbox"> <ul> & ...

  9. Java设计模式—策略模式

    1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下:     Define a family of algorithms,e ...

  10. Deep Transfer Network: Unsupervised Domain Adaptation

    转自:http://blog.csdn.net/mao_xiao_feng/article/details/54426101 一.Domain adaptation 在开始介绍之前,首先我们需要知道D ...