iOS-FMDB事务操作SQLite数据库
来源:互联网 发布:python随机数生成 编辑:程序博客网 时间:2024/05/06 08:52
批量操作数据库的时候,我们经常会用到事务处理。事务是访问并可能更新数据库各种数据项的数据单元(unit),是恢复和并发的控制的基本单位。
事务具有四个属性。
- 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
sqlite支持事务,FMDB也对事务进行了很好的封装。
事务形成的sql语句
触发事务:begin transaction
提交事务:commit transaction
回滚事务:rollback transaction
sqlite本身是支持事务操作的,FMDB作为sqlite的上层封装也对事务进行了支持,那么说了这么多给不了解“事务”这个词的同学解释一下吧:通常一次 sqlite3_exec 就是一次事务,假如你要对数据库中的Stutent表插入新数据,那么该事务的具体过程是:开始新事物->插入数据->提交事务,那么当我们要往该表内插入500条数据,如果按常规操作处理就要执行500次“开始新事物->插入数据->提交事务”的过程。
具体使用FMDB操作事务的方法:
//数据库对象static FMDatabase *_db;/** 用户数据库保存路径 */#define kVideoGatherDBFilePath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"VideoGatherDB.sqlite"]+(void)syschronizeDataWithArr:(NSArray *)dataArr{ _db = [FMDatabase databaseWithPath:kVideoGatherDBFilePath]; if ([_db open]) { [_db beginTransaction]; BOOL isRollBack = NO; @try { //先清空当前表中数据! BOOL successDelete = [_db executeUpdate:@"DELETE FROM t_Product"]; if (successDelete) { for (NSDictionary *productDict in dataArr) { NSString *NSR_NAME = [productDict objectForKey:@"NSR_NAME"]; NSString *ORG_ID = [productDict objectForKey:@"ORG_ID"]; NSString *NSRSBH = [productDict objectForKey:@"NSRSBH"]; if (![_db executeUpdate:@"INSERT INTO t_Product (NSR_NAME, ORG_ID, NSRSBH) VALUES (?,?,?)",NSR_NAME, ORG_ID, NSRSBH]) { NSLog(@"%@",[_db lastError]); break; } } } NSLog(@"产品表信息插入成功!"); dispatch_async(kMainQueue, ^{ [VideoGatherTool productDataToSuccess]; if (![VideoGatherTool sysDataIsSuccess]) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [SVProgressHUD showWithStatus:@"正在同步云端数据,请保持网络畅通!"]; }); }else{ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [SVProgressHUD showSuccessWithStatus:@"云端数据同步完成!"]; [SVProgressHUD dismissWithDelay:0.5]; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"kIsLoginSysData"]; }); } }); } @catch (NSException *exception) { isRollBack = YES; [_db rollback]; } @finally { if (!isRollBack) { [_db commit]; } } }}
- iOS-FMDB事务操作SQLite数据库
- iOS-FMDB事务操作SQLite数据库
- iOS FMDB操作sqlite数据库
- 数据库事务 ios FMDB
- 数据库事务 ios FMDB
- iOS学习笔记41-ios FMDB 数据库事务操作
- 【ios开发】使用FMDB封装类的sqlite数据库操作
- ios sqlite 第三方FMDB框架操作数据库
- iOS关于SQLite数据库的操作(使用第三方类库FMDB)
- iOS关于SQLite数据库的操作(使用第三方类库FMDB)
- iOS关于SQLite数据库的操作(使用第三方类库FMDB)
- iOS关于SQLite数据库的操作(使用第三方类库FMDB)
- ios FMDB第三方库操作SQLite数据库
- [IOS 开发] sqlite 使用事务操作数据库
- ios学习--sqlite 操作工具 FMDB
- iOS数据库操作之FMDB
- iOS数据库操作(使用FMDB)
- IOS 操作数据库(FMDB)
- 递归程序最难写......
- Codeforces Round #197 (Div. 2) -- D. Xenia and Bit Operations(线段树)
- 大顶堆(递归实现)
- Layer3 OSPF的LSAP和特殊区域总结
- iOS推送兼容iOS7
- iOS-FMDB事务操作SQLite数据库
- Android RecyclerView使用notifyItemRemoved()移除数据时数据错乱
- Django Admin
- HDU 3951 Coin Game(博弈)
- Android中关于Intent filter和Intent的一些用法。
- 【奔跑的菜鸟】第一个Java程序
- 使用C#+Web+硬件实现远程控制的实现(物联网通信)
- <cite>和cite属性的区别
- universal-imageloader和glide清除磁盘缓存问题