创建数据库,并使用事物的方式擦入数据

常用的数据库
//客户端:sqlite3
//服务器:oracle(Sun)、sybase、sqlserver、mysql、db2
//数据库的事物 ,有时候操作很多条sql语句时,会执行很长的时间,我们把这些语句放到一个事务中,可以提高效率
//下面取两个时间值可以比较出使用事物和不使用事物的时间差距
//创建数据库的方法
 NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.db"];
    _database = [[FMDatabase alloc] initWithPath:path];
    NSLog(@"%@",path);

    BOOL flag = [_database open];
    if (!flag) {
        NSLog(@"打开数据库失败");
    }else{
        //创建表
        NSString *sql = @"create table if not exists user(username varchar(255),age integer)";

        BOOL ret = [_database executeUpdate:sql];
        if (!ret) {
            NSLog(@"创建表失败");
        }

    }
    //取第一个时间值
       //插入数据
    NSDate *date1 = [NSDate date];

    //调用插入数据的方法,YES为使用事物插入,NO为不使用事物插入;
    [self insertDataWithNum:1000 isUserTransaction:YES];
    //取第二个时间值
    NSDate *date2 = [NSDate date];
    //两个时间值比较得出差值
    NSTimeInterval time = [date2 timeIntervalSinceDate:date1];
    NSLog(@"%lf",time);


    //插入数据的方法
- (void)insertDataWithNum:(int)num isUserTransaction:(BOOL)useTransaction
{
    if (useTransaction) {

        //使用事物
        BOOL isError = NO;

        @try {
            //开启事物
            [_database beginTransaction];

            //执行插入操作
            for (int i=0; i<num; i++) {

                NSString *name = [NSString stringWithFormat:@"第%d个用户",i];
                int age = arc4random()%20+20;

                NSString *insertSql = @"insert into user (username,age) values (?,?)";

                BOOL ret = [_database executeUpdate:insertSql,name,@(age)];
                if (!ret) {
                    NSLog(@"%@",_database.lastErrorMessage);
                }
            }
        }
        @catch (NSException *exception) {
            //出错
            isError = YES;

            //回滚
            [_database rollback];
        }
        @finally {

            if (!isError) {
                //提交事物
                NSLog(@"success");
                [_database commit];
            }

        }


    }else{

        //不使用事物
        for (int i=0; i<num; i++) {

            NSString *name = [NSString stringWithFormat:@"第%d个用户",i];
            int age = arc4random()%20+20;

            NSString *insertSql = @"insert into user (username,age) values (?,?)";

            BOOL ret = [_database executeUpdate:insertSql,name,@(age)];
            if (!ret) {
                NSLog(@"%@",_database.lastErrorMessage);
            }

        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值