码迷,mamicode.com
首页 > 数据库 > 详细

FMDB开启事务

时间:2015-08-18 22:56:56      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:

#import "RootViewController.h"
#import "FMDatabase.h"

@interface RootViewController ()
{
    FMDatabase *_dataBase;
}
@end

@implementation RootViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString *dbPath = [NSHomeDirectory() stringByAppendingFormat:@"/Documents/test.db"];
    //初始化
    _dataBase = [[FMDatabase alloc] initWithPath:dbPath];
    if ([_dataBase open]) {
       //创建表
        NSString *createSql = @"create table if not exists student(id integer,name varchar(256))";
        if (![_dataBase executeUpdate:createSql]) {
            NSLog(@"create error:%@",_dataBase.lastErrorMessage);
        }
    }
    //NSDate 时间类
    NSDate *date1 = [NSDate date];//获取系统当前时间
    [self insertDataWithCount:1000 isUseTransaction:NO];
    NSDate *date2 = [NSDate date];
    //取到时间的差值  (timeIntervalSinceDate 两个时间的差值,单位是秒)
    //NSTimeInterval 时间差变量,秒
    NSTimeInterval time = [date2 timeIntervalSinceDate:date1];
    NSLog(@"time:%f",time);
    
	// Do any additional setup after loading the view.
}
//插入批量数据,是否手动启用事务
- (void)insertDataWithCount:(NSInteger)count isUseTransaction:(BOOL)isUse{
    if (isUse) {
        //手动启用事务
        BOOL isError = NO;

        @try {
         //写可能出现异常的代码
            [_dataBase beginTransaction];//手动开启一个事务
            for (int i=0; i<count; i++) {
                NSString *idStr =[NSString stringWithFormat:@"%d",i];
                NSString *stName = [NSString stringWithFormat:@"student%d",i];
                NSString *insertSql = @"insert into student(id,name) values(?,?)";
                if (![_dataBase executeUpdate:insertSql,idStr,stName]) {
                    NSLog(@"insert error:%@",_dataBase.lastErrorMessage);
                }
            }
        }
        @catch (NSException *exception) {
          //捕获到异常
            NSLog(@"error:%@",exception.reason);
            isError = YES;
            [_dataBase rollback];//回滚,回到最初的状态
        }
        @finally {
           //无论有没有异常,代码都会执行到此处
            if (isError==NO) {
                [_dataBase commit];//提交事务,让批量操作生效
            }
        }
        
    }else{
       //常规操作
        for (int i=0; i<count; i++) {
            NSString *idStr =[NSString stringWithFormat:@"%d",i];
            NSString *stName = [NSString stringWithFormat:@"student%d",i];
            NSString *insertSql = @"insert into student(id,name) values(?,?)";
            if (![_dataBase executeUpdate:insertSql,idStr,stName]) {
                NSLog(@"insert error:%@",_dataBase.lastErrorMessage);
            }
        }
    }
}

FMDB开启事务

标签:

原文地址:http://blog.csdn.net/shuju345/article/details/47757743

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!