使用FMDB框架来操作数据库

一、什么是FMDB

FMDB是iOS平台的SQLite数据库框架,以OC的方式封装了SQLite的C语言API

二、FMDB的优点

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

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

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

三、FMDB的三个主要类

1、FMDatabase

一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句

(1)、使用FMDatabase打开数据库

// 拼接数据库地址
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *sqlFile = [path stringByAppendingPathComponent:@"student.sqlite"];
    // 该方法接收一个地址, 它会根据地址创建一个数据, 如果不存在就会自动创建
    FMDatabase *db = [FMDatabase databaseWithPath:sqlFile];
    if([db open]){
        // 创建表
        NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT, age INTEGER, score REAL);";
        // 在FMDB中除了查询以外的操作都称之为更新
        if([db executeUpdate:sql]){
            NSLog(@"创建表成功");
        }
    }

(2)、使用FMDatabase执行更新

NSString *sql = @"INSERT INTO t_student(age, score, name) VALUES ('28', 100, 'jonathan');";
    if([self.db executeUpdate:sql])
    {
        NSLog(@"插入成功");
    }

相比较于使用SQLite,FMDB只需一条sql语句,一个执行代码就完成了。

2、FMResultSet

使用FMDatabase执行查询后的结果集。

结合FMDatabase,实现数据库的查询操作

NSString *sql = @"SELECT * FROM t_student;";
    // 查询数据, 会将所有查询到得数据, 放到results中
    FMResultSet *results = [self.db executeQuery:sql];
    // 从results中获取数据
    while ([results next]) {
        NSString *name = [results stringForColumn:@"name"];
        int age = [results intForColumn:@"age"];
        double score = [results doubleForColumn:@"score"];
        NSLog(@"%@ %d %f", name, age, score);
          }

3、FMDatabaseQueue

用于在多线程中执行多个查询或更新,它是线程安全的,即不会出现脏数据或脏读

(1)、使用FMDatabaseQueue执行更新

// 拼接数据库地址
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
    NSString *sqlFile = [path stringByAppendingPathComponent:@"student.sqlite"];
    // 该方法接收一个地址, 它会根据地址创建一个数据, 如果不存在就会自动创建
    // 创建一个数据库队列
    FMDatabaseQueue *dbQueue = [FMDatabaseQueue databaseQueueWithPath:sqlFile];

    //只要调用dbQueue的inDatabase方法, 系统就会传递一个已经打开并且线程安全的数据库给我们
    [dbQueue inDatabase:^(FMDatabase *db) {
        // 创建表
        NSString *sql = @"CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT, age INTEGER, score REAL);";
        if([db executeUpdate:sql]){
            NSLog(@"创建表成功");
        }
    }];

(2)、使用FMDatabaseQueue执行查询

[dbQueue inDatabase:^(FMDatabase *db) {
        NSString *sql = @"SELECT * FROM t_student;";
        // 查询数据, 会将所有查询到得数据, 放到results中
        FMResultSet *results = [db executeQuery:sql];
        // 从results中获取数据
        while ([results next]) {
            NSString *name = [results stringForColumn:@"name"];
            int age = [results intForColumn:@"age"];
            double score = [results doubleForColumn:@"score"];
            NSLog(@"%@ %d %f", name, age, score);
        }
    }];

(3)、使用FMDatabaseQueue实现事务

利用FMDatabaseQueue的事务管理,我们可以同时执行多条sql语句,这样的好处就是要不所有的sql语句执行成功,要不所有的sql语句执行失败,该特性一般都会应用于银行业务中。

[self.dbQueue inDatabase:^(FMDatabase *db) {
        // 告诉系统开启事务, 只要开启事务之后, 但凡没有看到提交事务(事务结束), 那么中间执行的任何语句都将无效
        [db beginTransaction];
        NSString *sql1 = @"UPDATE t_student SET money = 500 WHERE name = 'cx'";
        NSString *sql2 = @"UPDATE t_student SET money = 1500 WHERE name = ‘wj'";
        [db executeUpdate:sql1];
        [db executeUpdate:sql2];
        // 提交事务(结束事务)
        [db commit];
    }];

时间: 2024-08-08 21:52:42

使用FMDB框架来操作数据库的相关文章

ci框架操作数据库基本方法

授课过程中如果涉及到文件夹或目录时,可使用缩进进行演示: application |-----libraries |-----xxx_helper.php system |-----libraries |-----url_helper.php --------------------------------------------------------------------------------------------------------------------------------

iOS数据库操作之FMDB框架的使用

原文链接:http://blog.csdn.net/xyz_lmn/article/details/9312837 iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁.易用的封装库,这一篇文章简单介绍下FMDB的使用. 在FMDB下载文

IOS:FMDB使用databaseQueue实现数据库操作线程安全

sqlite数据库是ios开发中经常使用到的数据持久化方案,因为项目需求的不同,对数据库操作的要求也不同. 由于最近使用sqlite时,有一些地方需要频繁的更新,这时在多线程操作时,其他线程访问数据库会造成程序崩溃,因为之前的框架里设计的数据库管理工具类采用的是单例模式,这样在多线程操作同一个数据库时很容易引起冲突,导致程序崩溃,所以开始寻找多线程下线程安全的办法. 其实FMDB本身已经对多线程做了考虑,FMDatabaseQueue就是为了解决数据库操作线程安全的,只是由于之前框架集成的单例操

使用FMDB框架来加载数据库

1.打开数据库 先要获取沙盒的数据库文件名,并创建数据库文件名,定数据库: @property (nonatomic, strong) FMDatabase *db; // 0.获得沙盒中的数据库文件名 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"

混合框架中Oracle数据库的还原处理操作

在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还原操作. 我们在Winform开发框架.混合式开发框架.Web开发框架等各种开发框架,底层都是支持多种数据库的,如MS SQLServer.Oracle.MySQL.SQLite.PostgreSQL等等,如下图所示. 其中SQLServer支持最为常用,而且也是最为方便备份还原的操作,而Oracle数据库这

greenDao:操作数据库的开源框架

greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Title,链接:http://greenrobot.org/greendao/,有兴趣的可以点进去(不用外网),里面有使用说明及相关资料的下载接口.greenDao目前版本已经更新到3.x.x,与2.x.x相比支持的功能发生了很大的改变(后面会提到),所以强烈推荐使用最新的版本.如3.1.1版本的获取方

Thinkphp框架回顾(三)之怎么实现平常的sql操作数据库

1.首先简单介绍一下我们的数据库,thinkphp数据库下有一个tp_user表,然后有四个字段....id,username,password,sex 我们今天的任务就是在Thinkphp下将数据调出来.(增删查改) <?php // 本类由系统自动生成,仅供测试用途 class IndexAction extends Action { public function select(){ /*这是从数据库里读取数据 * 有select();find();getfield()三种方法 //$m=

IOS 操作数据库(FMDB)

公司最近在做离线缓存的东西,用的是sqlite数据库保存的.使用第三方类库FMDataBase对数据库进行相关操作,这是我写的一个小demo,废话不说,先上效果图: 在操作数据库的时候遇到了一点小问题,sqlite里面string类型就用text来存储,int型用integer,float用real, 需要注意的是:插入数据的时候如果string类型直接插入,但是要是float或者是integer类型就需要将插入值转化成NSNumber数据类型如下:[NSNumber numberWithInt

PHP--TP框架----操作数据库

//操作数据库                    //$attr = $m->select(); //查询所有数据                    //$attr = $m->select("p001,p002,p003");                    //$attr = $m->find("p001"); //找特定的数据根据主键值找                                       //where