iOS | FMDB快速上手
任何的开发都或多或少的接触到数据库,而在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快速上手的更多相关文章
- [Android开发学iOS系列] 快速上手UIKit
快速上手iOS UIKit UIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持. 按照前面的介绍, 用U ...
- 快速上手Unity原生Json库
现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...
- Objective-C快速上手
最近在开发iOS程序,这篇博文的内容是刚学习Objective-C时做的笔记,力图达到用最短的时间了解OC并使用OC.Objective-C是OS X 和 iOS平台上面的主要编程语言,它是C语言的超 ...
- 快速上手 Kotlin 的 11 招
本文转载自 Kotlin 公众号(KotlinX) 作者:bennyhuo 最近经常会收到一些 "用 Kotlin 怎么写" 的问题,作为有经验的程序员,我们已经掌握了一门或者多门 ...
- Airtest 快速上手教程
一.Airtest 简介: AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和App. 自动化脚本录制.一键回放.报告查看,轻而易举实现自动化测试流程 支持基于图像识别的 Airt ...
- Mac快速上手指南
上周刚入手了2017版MacBookPro,预装macOS High Sierra.第一次接触Mac系统,经过一周的使用,简单总结下与Windows相比最常用的功能,快速上手. 1.Mac键盘实现Ho ...
- 几个小实践带你快速上手MindSpore
摘要:本文将带大家通过几个小实践快速上手MindSpore,其中包括MindSpore端边云统一格式及华为智慧终端背后的黑科技. MindSpore介绍 MindSpore是一种适用于端边云场景的新型 ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手
原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...
随机推荐
- Vue2.0以后,有哪些变化
最近移动端项目版本升级,Vue由之前的1.0升级到2.3,那么,Vue2.0之后,有哪些细节的变化呢,现在总结如下: 1.在每个组件模板,不再支持片段代码 组件中模板: 之前: <templat ...
- 破解jar包5步搞定,jira7.9.2操作成功,附github代码库
1,从要破解的程序中拷贝.jar包文件,运行1_jar.sh将其解压.以jira7.9.2为例: $install_dir\JIRA\atlassian-jira\WEB-INF\lib\atlass ...
- Java使用TCP聊天程序
前面使用了UDP进行通信的聊天程序 现在做一个用TCP进行通信的聊天程序 原理: ServerSocket Socket 1.开一个线程监听端口,准备接收消息 2.不断接受消息发送到目的端口 P.S. ...
- 关于消息推送的补充,主要介绍服务端的实现,包含object c 版本 c 版本 java 版本 php 版本 (转)
要实现消息推送功能,我们可以采用第三方(腾讯:信鸽:百度:云推送:极光推送:友盟):当然,因为各种原因,我们不能使用第三方的推送服务,那我们就需要自己编写服务端.在网上寻觅了很久,找到一篇很不错的讲解 ...
- Zepto结合Swiper的选项卡
我们昨天说了关于Angular的选项卡,那今天就说一下Swiper的选项卡吧! 今天的选项卡是Zepto结合Swiper的选项卡,咱么明天再说纯纯的Swiper的吧! 既然是关于Zepto和Swipe ...
- Windows内存管理系列
http://msdn.microsoft.com/en-us/library/hh851882(v=vs.85).aspx Managing Heap Memory Managing Memory- ...
- Hive的运算和函数大全
hive 常用运算 测试各种内置函数的快捷方法: 创建一个 dual 表 create table dual(id string); load 一个文件(只有一行内容:内容为一个空格)到 dual 表 ...
- 使用 richtextbox 输出程序运行信息
private delegate void Refresh_CallBack(Color color,string text); private void ControlsRefresh(Color ...
- 利用SQL Server Management Studio(SSMS)复制数据库
利用SQL Server Management Studio(SSMS)复制数据库 标签(空格分隔): SQLServer 前言 今天由于客户购买的软件版本确认了,而之前进行开发的本地数据库版本较低, ...
- VSCode-python 进阶配置
VSCode-python 进阶配置 中文乱码 中文乱码,网上一堆解决方法,但是根本没有有效起作用的. 在python脚本的前面添加: # -*- coding:utf-8 -*- 并不能在控制台输出 ...