iOS sqlite 使用事务操作数据库
2014-01-08 21:47
525 查看
业务层代码:
数据操作层(使用事务):
参考:
/article/2782734.html ios学习--SQLite常用函数 (最后一段,将事务的本质讲明白了)
//将解析的更新人员数据批量同步到数据库 +(void)operateCompUsers:(NSMutableArray*)operateCompUsers { sqliteHelper *mysqlite = [[sqliteHelper alloc]init]; if (operateCompUsers.count<=0) return; if([mysqlite openDatabase:@"ucab_db.db"]) { NSMutableArray *transactionSql= [[NSMutableArray alloc]init]; for (int i=0; i<operateCompUsers.count; i++) { CompUser *operateCompUser = [operateCompUsers objectAtIndex:i]; if ([operateCompUser.operateType isEqualToString:@"0"]) //删除 { NSString *nsstrSql = [[NSString alloc]initWithFormat:@"%@%@%@",@"delete from cloud_contacts where uid='",operateCompUser.uId,@"'"]; [mysqlite execSql:nsstrSql]; } if ([operateCompUser.operateType isEqualToString:@"1"]) //可用,新增数据 { //先将数据库中的数据删除 NSString *nsstrSql = [[NSString alloc]initWithFormat:@"%@%@%@",@"delete from cloud_contacts where uid='",operateCompUser.uId,@"'"]; [mysqlite execSql:nsstrSql]; //再添加一次 if (nil==operateCompUser.uId) operateCompUser.uId=@""; if (nil==operateCompUser.cn) operateCompUser.cn=@""; if (nil==operateCompUser.telephoneNumber) operateCompUser.telephoneNumber=@""; if (nil==operateCompUser.departmentNumber) operateCompUser.departmentNumber=@""; if (nil==operateCompUser.deptName) operateCompUser.deptName=@""; if (nil==operateCompUser.coNo) operateCompUser.coNo=@""; if (nil==operateCompUser.coName) operateCompUser.coName=@""; if (nil==operateCompUser.cuOrder) operateCompUser.cuOrder=@""; if (nil==operateCompUser.mobile) operateCompUser.mobile=@""; if (nil==operateCompUser.cuMail) operateCompUser.cuMail=@""; if (nil==operateCompUser.cuAllShow) operateCompUser.cuAllShow=@""; if (nil==operateCompUser.cuEntryStatus) operateCompUser.cuEntryStatus=@""; if (nil==operateCompUser.imagePath) operateCompUser.imagePath=@""; if (nil==operateCompUser.sort) operateCompUser.sort=@""; if (nil==operateCompUser.duty) operateCompUser.duty=@""; if (nil==operateCompUser.sex) operateCompUser.sex=@"0"; //性别默认为男 //组sql语句 NSString *strSql = [NSString stringWithFormat:@"insert into cloud_contacts (uid,cn,telephoneNumber,departmentNumber,deptName,coNo,coName,cuOrder,mobile,cuMail,cuAllShow,cuEntryStatus,imagePath,sort,duty,sex) values ('%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@');",operateCompUser.uId,operateCompUser.cn,operateCompUser.telephoneNumber,operateCompUser.departmentNumber,operateCompUser.deptName,operateCompUser.coNo,operateCompUser.coName,operateCompUser.cuOrder,operateCompUser.mobile,operateCompUser.cuMail,operateCompUser.cuAllShow,operateCompUser.cuEntryStatus,operateCompUser.imagePath,operateCompUser.sort,operateCompUser.duty,operateCompUser.sex]; [transactionSql addObject:strSql]; } } [mysqlite execInsertTransactionSql:transactionSql]; [mysqlite closeDatabase]; } }
数据操作层(使用事务):
//执行插入事务语句 -(void)execInsertTransactionSql:(NSMutableArray *)transactionSql { //使用事务,提交插入sql语句 @try{ char *errorMsg; if (sqlite3_exec(database, "BEGIN", NULL, NULL, &errorMsg)==SQLITE_OK) { NSLog(@"启动事务成功"); sqlite3_free(errorMsg); sqlite3_stmt *statement; for (int i = 0; i<transactionSql.count; i++) { if (sqlite3_prepare_v2(database,[[transactionSql objectAtIndex:i] UTF8String], -1, &statement,NULL)==SQLITE_OK) { if (sqlite3_step(statement)!=SQLITE_DONE) sqlite3_finalize(statement); } } if (sqlite3_exec(database, "COMMIT", NULL, NULL, &errorMsg)==SQLITE_OK) NSLog(@"提交事务成功"); sqlite3_free(errorMsg); } else sqlite3_free(errorMsg); } @catch(NSException *e) { char *errorMsg; if (sqlite3_exec(database, "ROLLBACK", NULL, NULL, &errorMsg)==SQLITE_OK) NSLog(@"回滚事务成功"); sqlite3_free(errorMsg); } @finally{} }
参考:
IOS操作SQLite http://taox.l.blog.163.com/blog/static/48365573201262312756819/ (重点参考)
iOS 中sqlite 事务提交代码 http://blog.csdn.net/hekunhotmail/article/details/8735882 (参考的比较多)/article/2782734.html ios学习--SQLite常用函数 (最后一段,将事务的本质讲明白了)
相关文章推荐
- 怎样使MySQL安全以对抗解密高手
- ORACLE删除字段(set unused的用法)
- oracle最大连接数的设置
- NoSql数据库使用
- LINUX下对oracle数据库操作的命令
- MySQL如何利用索引优化ORDER BY排序语句
- sql分页优化
- window下redis的使用以及服务器集群配置
- Mybatis批量插入语句(oracle)
- JDBC链接数据库
- 解决oracle导出dmp时 904错误
- MySQL数据库索引中的单列索引与多列索引
- Ubuntu12.4 安装 Mysql 5.6 deb版 数据库
- oracle 视图总结
- Memcached 集群架构方面的问题
- oracle的start with connect by语句
- 用Log4Net记录NHibernate中执行的SQL语句及执行时间
- sql如何通过语句批量增加数据;删除表中重复数据
- 常用SQL语句
- 关于分页,SQLServer中的top、MySql中的limit、Oracle中的rownum的区别?