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

////常用的数据库
//客户端: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);
            }

        }

    }
}
阅读更多
文章标签: 数据库
个人分类: 数据库小知识
上一篇内存管理
下一篇如何是cell中的图片只下载一次
想对作者说点什么? 我来说一句

eraser数据擦除工具

2013年12月11日 951KB 下载

咔擦mailsee1.0邮箱密码破解教程

2010年08月15日 11.23MB 下载

phpstudy快速创建mysql数据

2018年04月02日 35.63MB 下载

电子购物商城系统(C#实现)

2011年09月22日 2.18MB 下载

Excel数据导入数据库中

2015年10月26日 527KB 下载

PostgreSQL 了解

2012年01月04日 48KB 下载

北大青鸟ACCP5.0S2 数据库PPT课件

2011年04月26日 6.19MB 下载

没有更多推荐了,返回首页

关闭
关闭