Objective-C

【iOS】数据库事务

2017-11-28  本文已影响59人  Colleny_Z

我是题外话

最近在用Realm数据库,然后就对事务的概念又重新的认知了一下,下面先使用系统提供的SQLite来应用一下,后续更新

事务(Transaction)概念

事务基本特征。

事务属性

事务语句

- (void)openDB {
    // 如果数据库已经打开,没有必要再打开一次.
    if (db) {
        return;
    }
    
    // 创建数据库文件的路径
    NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"Student.sqlite"];
    
    int result = sqlite3_open(filePath.UTF8String, &db);
    if (result == SQLITE_OK) {
        NSLog(@"数据库打开成功!");
    } else {
        NSLog(@"数据库打开失败,错误码:%d", result);
    }
}

- (void)insertData:(id)obj useTransaction:(BOOL)useTransaction
{
    [self openDB];
    
    NSString *uid = [NSString stringWithFormat:@"%d",[obj valueForKey:@"uid"]];
                NSString *name = [[NSString alloc] initWithFormat:@"%@",[obj valueForKey:@"uid"]];
                NSString *sql = @"INSERT INTO person(uid,name) VALUES (?,?)";
                
    if (useTransaction) {
     // 开启事务后这里可以做一系列操作。。
        [db beginTransaction];
        BOOL isRollBack = NO;
        @try {
                BOOL success = [db executeUpdate:sql,uid,name];
                if (!success) {
                    NSLog(@"插入失败");
                }
            }
        }
        @catch (NSException *exception) {
        // 如果失败,回滚事务
            isRollBack = YES;
            [db rollback];
        }
        @finally {
        // 如果成功,提交事务
            if (!isRollBack) {
                [db commit];
            }
        }
    }else{
        BOOL success = [db executeUpdate:sql,uid,name];
        if (!success) {
                    NSLog(@"插入失败");
          }
        }
    }
    [self closeDB];
}
- (BOOL)closeDB{ 
   return [db close];
}

更多事务概念可参考事务
事务相关

上一篇 下一篇

猜你喜欢

热点阅读