任何的开发都或多或少的接触到数据库,而在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. linq(查询)

    1.改变数据库某一字段的属性 db.tableName.ToList().ForEach(x => x.State = false); 2.排序 db.tableName..toList().O ...

  2. python爬虫学习(一)

    #简单例子:抓取网页全部内容后,根据正则表达式,获取符合条件的字符串列表from urllib import request#正则表达式import re url = "http://www ...

  3. window 常用MySQL数据库命令总结

    登录:cmd - mysql -uroot -p 创建数据库:CREATE DATABASE `tpcms` DEFAULT CHARACTER SET utf8 COLLATE utf8_gener ...

  4. 打杂程序员之ftp换成外网ip咋就登陆不上?

    主动模式ftp N连接到ftp的21端口.然后客户端开端口监听,并通过N+1端口发送命令给FTP服务器.服务器反过来连接用户本地端口. 被动模式解决从服务器到客户端数据端口的入口反向连接被防火墙过滤掉 ...

  5. android drag

    1.Android:Drag and Drop的应用 2.Android 用户界面---拖放(Drag and Drop)(三) 3.Android 用户界面---拖放(Drag and Drop)( ...

  6. scala之Duration

    import scala.concurrent.duration._ val duration = Duration(100, MILLISECONDS) val duration = Duratio ...

  7. asyncio标准库1 Hello World

    利用asyncio的event loop,编写和调度协程 coroutine [,kəuru:'ti:n] n. 协程 Simple coroutine(调用1个协程) import asyncio ...

  8. (五)TortoiseSVN 客户端-----安装

    svn客户端类型 svn客户端需要通过网络访问svn服务端提交文件.查询文件等,可通过以下客户端类型访问svn服务端: 使用Subversion提供的客户端命令,使用方式:在命令行下输入命令操作. 使 ...

  9. 启动eclipse出现“Error opening registry key 'software\Javasoft\Java Runtime Environment'”

    启动eclipse出现“Error opening registry key 'software\Javasoft\Java Runtime Environment'”,“java was start ...

  10. May 22nd 2017 Week 21st Monday

    The biggest adventure you can take is to live the life of your dreams. 你能经历的最大的冒险,就是过上你梦想的生活. Just l ...