FMDB的简单使用

数据库 中 insert into 语句等操作是比较耗时的,假如我们一次性插入几百几千条数据就会造成主线程阻塞,以至于ui界面卡住。那么这时候我们就要开启一个事物来进行操作。 
原因就是它以文件的形式存在磁盘中,每次访问时都要打开一次文件,如果对数据库进行大量的操作,就很慢。可是如果我们用事物的形式提交,开始事务后,进行的大量操作语句都保存在内存中,当提交时才全部写入数据库,此时,数据库文件也只用打开一次。如果操作错误,还可以回滚事务。

//

//  ViewController.m

//  FMDBandCocoaPods

//

//  Created by 孙璐 on 17/3/13.

//  Copyright © 2017年 孙璐. All rights reserved.

//


#import "ViewController.h"

#import <FMDB.h>

@interface ViewController ()

@property(nonatomic,strong)FMDatabaseQueue * queue;

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    NSString *filePath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"fmdb.sqlite"];

    //创建数据库,并加入到队列中,此时已经默认打开了数据库,无须手动打开,只需要从队列中去除数据库即可

    self.queue=[FMDatabaseQueue databaseQueueWithPath:filePath];

    //取出数据库,这里的db就是数据库,在数据库中创建表

    [self.queue inDatabase:^(FMDatabase *db) {

        //创建表

        BOOL createTableResult=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT,name text,age integer)"];

        if (createTableResult) {

            NSLog(@"创建表成功");

        }else{

            NSLog(@"创建表失败");

        }

    }];

}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

    [self delete];

    [self insert];

    //[self update];

    [self select];

}

- (void)insert{

    //操作放在事务中  节省时间 相当于给500件商品全部生产完再送出  非事务相当于生产一件送出一件

    [self.queue inTransaction:^(FMDatabase *db, BOOL *rollback) {

        for (int index=0; index<50; index++) {

            NSString *s_name=[NSString stringWithFormat:@"Andy%d",arc4random()%100];

            NSNumber *s_age=@(arc4random()%100);

           BOOL a = [db executeUpdate:@"INSERT INTO t_student(name,age) VALUES(?,?)",s_name,s_age];

            //回滚(如果插入数据错误 之前的操作都抹掉)

            if (!a) {

                *rollback = YES;

                return;

            }

        }

    }];

}


- (void)delete{

    [self.queue inDatabase:^(FMDatabase *db) {

        [db executeUpdate:@"delete from t_student"];

    }];

}


- (void)update{

    [self.queue inDatabase:^(FMDatabase *db) {

        [db executeUpdate:@"UPDATE t_student SET name='Jack' WHERE id=?",@2];

    }];

}


- (void)select{

    [self.queue inDatabase:^(FMDatabase *db) {

        //获取结果集,返回参数就是查询结果

        FMResultSet *rs=[db executeQuery:@"SELECT * FROM t_student"];

        while ([rs next]) {

            int ID=[rs intForColumn:@"id"];

            NSString *NAME=[rs stringForColumn:@"name"];

            int AGE=[rs intForColumn:@"age"];

            NSLog(@"%d %@ %d",ID,NAME,AGE);

        }

    }];

}


@end

猜你喜欢

转载自blog.csdn.net/qq_30737525/article/details/62041721