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);
    }];

猜你喜欢

转载自www.cnblogs.com/JanChuJun/p/10102268.html