ios数据库sqlite-第三方框架FMDB,关于线程安全的事务处理

导入sqlite3数据库和第三方框架FMDB

// 1.获取沙盒路径

NSString * path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

path = [path stringByAppendingPathComponent:@"FMDB.sqlite"];

NSLog(@"%@",path);

//2.创建FMDBDataBaseQueue对象并打开()

FMDatabaseQueue * queue = [[FMDatabaseQueue alloc]initWithPath:path];

[queue inDatabase:^(FMDatabase *db) {

NSString * createTable = @"create table if not exists t_person(person_id integer primary key autoincrement,person_name varchar,person_age
integer)";// 没有primary key会创建失败

BOOL createFlag = [db executeUpdate:createTable];

if (createFlag) {

NSLog(@"创建成功");

}else{

NSLog(@"创建失败");

}

}];

//    // 3.增

//    [queue inDatabase:^(FMDatabase *db) {

//        NSString * insert = @"insert into t_person(person_name,person_age)values(?,?)";

//        for (int i = 0; i < 3; i++) {

//            NSString * name = [NSString stringWithFormat:@"jack%i",i];

////            int age = 20+i;

//            NSString * age = [NSString stringWithFormat:@"%i",20+i];

//

////            NSLog(@"%@,%@",name,age);

//          BOOL insertFlag = [db executeUpdate:insert,name,age];

//            if (insertFlag) {

//                NSLog(@"插入数据成功");

//            }else{

//                NSLog(@"插入数据失败");

//            }

//        }

//

//    }];

// 4.改

[queue inDatabase:^(FMDatabase *db) {

NSString * changeData = @"update t_person set person_age = 99 where person_id = 3";

[db executeUpdate:changeData];

}];

// 5.查

[queue inDatabase:^(FMDatabase *db) {

NSString * select = @"select * from t_person";

FMResultSet * resultSet = [db executeQuery:select];

}];

// 第一种情况 线程安全,解决同时取钱透支问题(上面解决)

// 第二种情况 转账:钱划出去了,进账:钱划进来,转出去了,但因为网络断网或者程序出错等原因未到指定账户的问题(下面解决)

// 创建fmdbDataBase对象并打开

FMDatabase * db = [[FMDatabase alloc]initWithPath:path];

[db open];

//买书操作

// 1>扣钱

[db beginDeferredTransaction];//开启事务

NSString * minusSql = @"update t_money set money=money-10";

BOOL deletaFlag = [db executeUpdate:minusSql];

NSString * addSql = @"insert into t_person (person_name,person_age)values(‘语文‘,80)";

BOOL addFlag = [db executeUpdate:addSql];

// 只有都执行成功了才执行,如果有一条不成功就“回滚”

if (deletaFlag&&addFlag) {

[db commit];// 提交事务

NSLog(@"commit");

}else{

[db rollback];// 回滚事务

NSLog(@"rollback");

}

}

// 第一种情况 线程安全,解决同时取钱透支问题(上面解决)

// 第二种情况 转账:钱划出去了,进账:钱划进来,转出去了,但因为网络断网或者程序出错等原因未到指定账户的问题(下面解决)

// 第一种情况 线程安全,解决同时取钱透支问题(上面解决)

// 第二种情况 转账:钱划出去了,进账:钱划进来,转出去了,但因为网络断网或者程序出错等原因未到指定账户的问题(下面解决)

// 第一种情况 线程安全,解决同时取钱透支问题(上面解决)

// 第二种情况 转账:钱划出去了,进账:钱划进来,转出去了,但因为网络断网或者程序出错等原因未到指定账户的问题(下面解决)

// 第一种情况 线程安全,解决同时取钱透支问题(上面解决)

// 第二种情况 转账:钱划出去了,进账:钱划进来,转出去了,但因为网络断网或者程序出错等原因未到指定账户的问题(下面解决)

// 第一种情况 线程安全,解决同时取钱透支问题(上面解决)

// 第二种情况 转账:钱划出去了,进账:钱划进来,转出去了,但因为网络断网或者程序出错等原因未到指定账户的问题(下面解决)

时间: 2024-10-03 18:51:05

ios数据库sqlite-第三方框架FMDB,关于线程安全的事务处理的相关文章

【iOS开发-105】SQLite第三方框架FMDB的使用,以及使用FMDatabaseQueue保证线程安全

(1)下载地址:https://github.com/ccgus/fmdb (2)注意点 --语句可以带分号":",也可以省略分号. --同样需要添加"libsqlite3.dylib"库才能使用. --移动端的开发中,一般不关闭数据库,即不怎么使用[self.db close];,因为每次重新打开比较耗性能,且每次程序关闭时数据库自然会同时关闭. (3)用法 #import "ViewController.h" #import "FM

[iOS]数据库第三方框架FMDB详细讲解

[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等. FMDB是一款简洁.易用的封装库.因此,在这里推荐使用第三方框架FMDB,它是对libsqlite3框架的封装,用起来的步骤与SQLite使用类似,并且它对于多线程的并发操作进行了处理,所以

sqlite第三方类库fmdb的使用

FMDB是ios平台下解析sqlite的第三方数据库管理框架,使用非常方便,而且提供了多线程安全的数据库操作,相比coredata来说更加灵活和轻量级. fmdb主要有三个类别: fmdatabase:用来执行sql语句: fmresultset:用来使用fmdatabase执行查询后的结果集合 fmdatabasequeue:用来在多线程中查询和更新数据,它是线程安全的. fmdb的使用 1.在新建的项目中,导入libsqlite3的动态数据库: 注:(在Building Phases中的Li

iOS-数据持久化-第三方框架FMDB的使用

FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比苹果自带的Core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱 3.FMDB的github地址 https://github.com/ccgus/fmdb 二.核心类 FMDB有三个主要的类 (1)FMDatabase 一个F

db数据库利用第三方框架进行提取和解析数据

db的数据包用从github上下载的三方框架进行解析和数据提取,格式一般为数组和字典.db的查看工具是firefox上的解析db插件SQLite 三方框架为FMDB #import "ViewController.h" //1. 引入头文件,需要引入libsqlite3的库 #import "FMDB.h" #import "Word.h" @interface ViewController () @end @implementation Vie

iOS数据库第三方框架FMDB学习笔记

在植物日记的app里,使用SQLite3进行数据存放,为了简化代码,使用了FMDB框架进行数据库操作.几个注意点: 1.executeQuery和executeUpdate的区分 除了SELECT操作使用executeQuery以外,其他操作都是executeUpdata. 2.数据库读写图片 必须先把图片转换成NSData类型再进行存储.NSData *data = UIImageJPEGRepresentation(image, 1); 读取的时候需要进行转换  [UIImage image

iOS开发常用第三方框架

1.网络通信 1.ASIHTTPRequest 这是一个经典的老库,功能完全而强大,但已经停止更新很久了(iOS5.0停止更新,但是我最近看github上这个项目有新改动).在不同iOS版本上略微有一些小问题(提醒显示上的),所以用的时候还是稍微修改一下比较好. 下载地址:https://github.com/pokeb/asi-http-request 2.AFNetworking 轻量级的通讯类库,使用非常简单. 下载地址:https://github.com/AFNetworking/AF

iOS 数据库SQLite

SQLite介绍 SQLite是一款轻型的嵌入式数据库,安卓和iOS开发使用的都是SQLite数据库. 它的特点: 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了. 它的处理速度比MySQL.PostgreSQL这两款著名的数据库都还快. 它是C语言框架的,跨平台性强. 要在iOS中使用SQLite3,需要在Xcode导入libsqlite3的库 下面是结合SQL语句完成数据库操作,使用到的是上面定义的方法: 创建表: create table 表名称(字段1,字段2,--,字

ios数据库SQLite实现

SQLite嵌入式数据库 1.支持时间,不需要配置,不需要安装,不需要管理员; 2.支持大部分SQL92; 3.完整的数据库保存在磁盘上面的一个文件,同一个数据库文件可以在不同机器上面使用.最大支持数据库到2T; 4.占用内存少; // 如果你使用数据库的话 要引入一个框架 // libsqlite3.0.dylib框架 1 创建一个studentmodel类 2 #import <Foundation/Foundation.h> 3 4 @interface LanOuStudent : N