zoukankan      html  css  js  c++  java
  • FMDB数据库框架

    nFMDB
     
    nFMDB
    n什么是FMDB
    pFMDB是iOS平台的SQLite数据库框架
    pFMDB以OC的方式封装了SQLite的C语言API
    p
    nFMDB的优点
    p使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
    p对比苹果自带的Core Data框架,更加轻量级和灵活
    p提供了多线程安全的数据库操作方法,有效地防止数据混乱
    p
    nFMDB的github地址
    phttps://github.com/ccgus/fmdb
    p
    n核心类
    nFMDB有三个主要的类
    pFMDatabase
    ü一个FMDatabase对象就代表一个单独的SQLite数据库
    ü用来执行SQL语句
    ü
    pFMResultSet
    ü使用FMDatabase执行查询后的结果集
    ü
    pFMDatabaseQueue
    ü用于在多线程中执行多个查询或更新,它是线程安全的
    n打开数据库
    n通过指定SQLite数据库文件路径来创建FMDatabase对象

    FMDatabase *db = [FMDatabase databaseWithPath:path];

    if (![db open]) {

        NSLog(@"数据库打开失败!");

    }

    n
    n文件路径有三种情况
    p具体文件路径
    ü如果不存在会自动创建
    ü
    p空字符串@""
    ü会在临时目录创建一个空的数据库
    ü当FMDatabase连接关闭时,数据库文件也被删除
    p
    pnil
    ü会创建一个内存中临时数据库,当FMDatabase连接关闭时,数据库会被销毁
    n执行更新
    n在FMDB中,除查询以外的所有操作,都称为“更新”
    pcreate、drop、insert、update、delete等
    p
    n使用executeUpdate:方法执行更新
    p- (BOOL)executeUpdate:(NSString*)sql, ...
    p- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
    p- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
    p
    n示例

    [db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

    n执行查询
    n查询方法
    p- (FMResultSet *)executeQuery:(NSString*)sql, ...
    p- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
    p- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
    p
    n示例

    // 查询数据

    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"];

    }

    nFMDatabaseQueue
    nFMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
    n
    n为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
    n
    nFMDatabaseQueue的创建

    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

    nFMDatabaseQueue
    n简单使用

    [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]) {

            // …

        }

    }];

    nFMDatabaseQueue
    n使用事务

    [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]) {

            // …

        }

    }];

    n事务回滚

    *rollback = YES;

    n
  • 相关阅读:
    强化学习的基本迭代方法
    基于文本描述的事务聚类
    学习强化学习之前需要掌握的3种技能
    其它 华硕 ASAU S4100U 系统安装 win10安装 重装系统 Invalid Partition Table 解决
    数据分析 一些基本的知识
    Python 取样式的内容 合并多个文件的样式 自定义样式
    电商 Python 生成补单公司需要的评论格式3
    SpringBlade 本地图片上传 生成缩略图
    SQL Server 字符串截取
    SpringBlade 本地图片上传
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4888687.html
Copyright © 2011-2022 走看看