关闭

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

标签: 数据库
119人阅读 评论(0) 收藏 举报
分类:
////常用的数据库
//客户端: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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10797次
    • 积分:429
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:37篇
    • 译文:15篇
    • 评论:0条