zoukankan      html  css  js  c++  java
  • rollback的作用

    #pragma mark - 以队列的形式添加

    // 以队列的形式添加数据FMDB比较常用的添加方式

    // FMDB不支持多个线程同时操作,所以一般以串行的方式实现相关操作

    - (IBAction)insertManyStudent:(id)sender {

        // 第一步:打开数据库

        [self.dataBase open];

        // 第二步:创建操作队列

        FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:self.filePath];

        // 标识:记录是否操作成功

        __block BOOL isSucceed = YES;

        // 第三步:把所需要的事情打包放在队列中

        [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {

            // 串行队列  

            isSucceed = [db executeUpdate:@"insert into t_student(name,age,sex) values(?,?,?)", @"gblw", @38, @"nan"] && isSucceed;

            isSucceed = [db executeUpdate:@"insert into t_student(name,age,sex) values(?,?,?)", @"black", @22, @"nv"] && isSucceed;

            isSucceed = [db executeUpdate:@"insert into t_student(name,age,sex) values(?,?,?)", @"-1", @69, @"nan"] && isSucceed;

            // 如果有错误,就会将它返回

            if (!isSucceed) {

                // block返回的参数 rollback进行处理 (bool类型的指针)

                *rollback = YES;

                return ;

            }

            // rollback 回滚的意思。 就是数据库里做修改后( update ,insert , delete)未 commit 之前 使用 rollback 可以恢复数据到修改之前。

            // 这句代码,假设在执行第一句执行完后,数据库服务器故障,抛出异常了,第二句就没有执行。这时候数据库的情况就是:id1name更新了,id2name没有更新。假设业务逻辑不能容忍这种只执行一半的情况,那么就应该rollback,把id1name恢复到一切执行之前的情况。

            // 如果业务逻辑可以容忍这种只执行一半SQL的行为,那就不需要rollback

            // 数据库事务控制的精髓就一句话:对于一堆sql语句来说,要么都执行,要么都不执行。其中要么都不执行的部分,就是用rollback实现的

        }];

        [self.dataBase close];

    }

     

  • 相关阅读:
    Excel文件上传,解析,下载(一 文件上传,使用MultipartFile来实现)
    从svn下载的Mavn项目,到本地后不识别(MyEcplise)
    Tomcat源代码阅读----服务器的启动(2)
    Tomcat源代码阅读----源代码部署(1)
    针对dhtmlX当中的treegrid在java类当中的封装实现的步骤(后台代码)
    Eclipse的maven插件最新地址
    oracle-创建JOB
    简单旋转特效的实现
    Spark SQL 小文件问题处理
    学好Spark/Kafka必须要掌握的Scala技术点(三)高阶函数、方法、柯里化、隐式转换
  • 原文地址:https://www.cnblogs.com/crazygeek/p/5543385.html
Copyright © 2011-2022 走看看