任何的开发都或多或少的接触到数据库,而在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);
}];
网友评论