我将尝试使用FMDB sqlite iOS包装器进行交易.
文档对交易有点模糊,但从快速浏览一些功能我已经提出了以下逻辑:
[fmdb beginTransaction]; // Run the following query BOOL res1 = [fmdb executeUpdate:@"query1"]; BOOL res2 = [fmdb executeUpdate:@"query2"]; if(!res1 || !res2) [fmdb rollback]; else [fmdb commit];
解决方法
如果第一次失败,我不会尝试第二次更新.
bool ret = false; [fmdb beginTransaction]; ret = [fmdb executeUpdate:@"query1"]; if (ret) { ret = [fmdb executeUpdate:@"query2"]; if (!ret) { // report error 2 } } if(ret) { if (![fmdb commit]) { // panic! } } else { if (![fmdb rollback]) { // panic! } }
对于偏执狂的鲁棒性,你应该尝试… catch块,以防任何事情引起异常.如果你这样做,你可以利用它来获得优势.
[fmdb beginTransaction]; @try { if (![fmdb executeUpdate:@"query1"]) { // report error @throw someExcpetion; } if (![fmdb executeUpdate:@"query2"]) { // report error @throw someExcpetion; } [fmdb commit] } @catch(NSException* e) { [fmdb rollback]; // rethrow if not one of the two exceptions above }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。