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);
}];
上一篇:mysql 统计一个字符在字符串中出现的次数


下一篇:ASP.NET之旅--深入浅出解读IIS架构