iOS中FMDB事务实现批量更新数据
程序员文章站
2023-12-17 20:55:40
本文实例为大家分享了ios中fmdb事务实现批量更新数据,供大家参考,具体内容如下
打开数据库(sqlite)
///打开数据库
+ (bool)openda...
本文实例为大家分享了ios中fmdb事务实现批量更新数据,供大家参考,具体内容如下
打开数据库(sqlite)
///打开数据库 + (bool)opendatabase{ _tydatabase = [[fmdatabase alloc]initwithpath:[self databasepath]]; if ([_tydatabase open]) { return yes; } return no; } ///数据库路径 + (nsstring *)databasepath{ nsstring *documentpath = [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) lastobject]; nsstring *datapath = [documentpath stringbyappendingpathcomponent:@"ty.sqlite"]; nsfilemanager *filem = [nsfilemanager defaultmanager]; if (![filem fileexistsatpath:datapath]) { nsstring *filepath = [[nsbundle mainbundle] pathforresource:@"ty" oftype:@"sqlite"]; [filem copyitematpath:filepath topath:datapath error:nil]; } nslog(@"%@",datapath); return datapath; }
事务
/** 事务 arraysql:sql语句数组 */ - (void)begintransaction:(nsarray *)arraysql; { //// static fmdatabase *_tydatabase = nil; bool isopen=[_tydatabase open]; if (!isopen) { nslog(@"打开数据库失败!"); return; } ///开始事物 [_tydatabase begintransaction]; bool isrollback = no; @try { for (int i = 0; i<arraysql.count; i++) { bool result = [_tydatabase executeupdate:arraysql[i]]; if (!result) { nslog(@"操作失败【%d】== sql:%@",i,arraysql[i]); } } } @catch (nsexception *exception) { isrollback = yes; ///回滚 [_tydatabase rollback]; } @finally { if (!isrollback) { ///提交 [_tydatabase commit]; } } [_tydatabase close]; }
多线程事务
/** 多线程事务 arraysql:sql语句数组 */ + (void)begintransactiont:(nsarray *)arraysql{ fmdatabasequeue *databasequeue = [fmdatabasequeue databasequeuewithpath:[self databasepath]]; [databasequeue intransaction:^(fmdatabase *db, bool *rollback) { bool result = no; for (int i = 0; i < arraysql.count; i++) { result = [_tydatabase executeupdate:arraysql[i]]; } if (result) { nslog(@"成功"); } }]; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。