FMDB的简述和简单使用

作者: Lessin | 来源:发表于2016-08-18 23:22 被阅读300次

    一、FMDB的概念

    1.什么是FMDB?

    (1)FMDB是iOS平台的SQLite数据库框架

    (2)FMDB以OC的方式封装了SQLite的C语言API

    2.FMDB的优点

    (1)使用起来更加面向对象,省去了很多麻烦、冗余C语言代码

    (2)对比苹果自带的Core Data框架,更加轻量级和灵活

    (3)提供了多线程安全的数据库操作方法,有效地防止数据混乱

    二、核心类

    FMDB有三个主要的类

    (1)FMDatabase
    • 一个FMDatabase对象就代表一个单独的SQLite数据库

    • 用来执行SQL语句

    (2)FMResultSet
    • 使用FMDatabase执行查询后的结果集
    (3)FMDatabaseQueue
    • 用于在多线程中执行多个查询或更新,它是线程安全的

    三、打开数据库

    1.通过制定SQLite数据库文件路径创建FMDatabase对象

    FMDatabase *db = [FMDatabase databaseWithPath:path];
    if(![db open]){ NSLog(@"数据库打开失败"); }

    2.文件路径有三种情况

    1.具体文件路径
    • 如果不存在会自动创建
    2.空字符串
    • 会在临时目录创建一个空的数据库
    • 当FMDatabase连接关闭时,数据文件也被删除
    3.nil
    • 会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁

    四、执行更新

    1.在FMDB中,除查询以外的所有操作,都成为“更新”

    • create、drop、insert、update、delete等

    2.使用executeUpdate:方法执行更新

    • -(BOOL)executeUpdate: (NSString *)sql,...
    • -(BOOL)executeUpdateWithFormat: (NSString *)format,...
    • -(BOOL)executeUpdate: (NSString *)sql WithArgumentsInArray:(NSArray *)arguments

    五、执行查询

    1.查询方法

    • -(FMResultSet *)executeQuery: (NSString *)sql,...
    • -(FMResultSet *)executeQueryWithFormat: (NSString *)format,...
    • -(FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray: (NSArray *)arguments

    2.示例

    //查询数据
    FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
    //遍历结果集

    while([rs next]){ NSString * name = [rs stringForColumn:@"name"]; int age = [rs intForColumn:@"age"]; double score = [rs doubleForColumn:@"score"]; }

    六、FMDatabaseQueue

    1.FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
    2.为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
    3.FMDatabaseQueue的创建
    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];
    4.简单使用

    ``[queue inDatabase:^(FMDatabase * db){
    [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jack"]
    [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Rose"]

    [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jim"]
    FMResultSet *rs = [db executeQuery:@"select * from t_student"];
    while([rs next]){
    //...
    

    }
    }];``

    5.使用事务

    [queue inTransaction:^(FMDatabase * db, BOOL *rollback){ [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jack"] [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Rose"] [db executeUpdate:@"INSERT INTO t_student(name) VALUES(?)", @"Jim"] FMResultSet *rs = [db executeQuery:@"select * from t_student"]; while([rs next]){ //... } }];

    6.回滚
    *rollback = YES;

    相关文章

      网友评论

        本文标题:FMDB的简述和简单使用

        本文链接:https://www.haomeiwen.com/subject/opovsttx.html