数据持久化之FMDB--基本使用

来源:互联网 发布:淘宝零点秒杀在哪 编辑:程序博客网 时间:2024/06/05 02:11
在iOS开发中数据存储较多数据首先想到的要算数据库。

sqlite是一个轻量级、跨平台的小型数据库,其拥有可移植性高、有着和MySql几乎相同的数据库语句以及无需服务器即可使用的优点:

一、可以存储大量的数据,存储和检索的速度非常快;

二、能对数据进行大量的聚合,这样比起使用对象来进行这些操作要快。

当然,它也具有明显的缺点:

一、它没有提供数据库的创建方式;

二、它基于C语言框架设计,没有面向对象的API,所以使用起来比较麻烦;

三、复杂的数据模型的数据建表相对而言比较麻烦。

通常,我们都是使用基于sqlite封装的开源数据库FMDB来减少使用sqlite的工作量,无论ARC和MRC都能应付自如,FMDB会在编译时自动匹配。

简单介绍一下FMDB的使用

1.首先指定数据存储路径,通常在Document目录下边;

 //数据库文件存储路径

    NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Data.db"];

//创建数据库实例

    db = [[FMDatabase alloc] initWithPath:dbPath];

2.创建表

//创建表

- (void)creatTable{

    //打开数据库

    if ([db open]) {

        //开启事务

        [db beginTransaction];

        //简单创建表语句

        NSString *sql = @"create table if not exists person (id integer primary key autoincrement, name text, age integer, address text)";

        BOOL rec = [db executeUpdate:sql];

        if (rec) {

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

        }

        //提交结束事务,不可缺少。不然会生成数据库临时文件。

        [db commit];

    }

}

3.插入一条数据:

- (void)insertTable{

    if ([db open]) {

        NSString *sql = @"insert into person (name, age, address) values (\"张三\",25,\"上海市\")";

        BOOL rec = [db executeUpdate:sql];

        if (rec) {

            NSLog(@"插入数据成功");

        } else {

            NSLog(@"插入数据失败");

        }

    }

}

4.查询表数据,例如查询id>3的全部数据:

- (NSMutableArray *)selectdata{

    if ([db open]) {

        NSString *sql = @"select * from person where id > 3";

        FMResultSet *rs = [db executeQuery:sql];

        if (rs) {

            NSMutableArray *resurt = [NSMutableArray array];

            while ([rs next]) {

                NSDictionary *dic = [rs resultDictionary];

                [resurt addObject:dic];

            }

            return resurt;

        }

    }

    return nil;

}

5.更新一条数据,例如更新address为“北京市”:

- (void)updateTable{

    if ([db open]) {

        NSString *sql = @"update person set address = \"北京市\"";

        BOOL rec = [db executeUpdate:sql];

        if (rec) {

            NSLog(@"修改成功");

        }

    }

}

6.删除数据,例如删除id>3的行

- (void)deleteData{

    if ([db open]) {

        NSString *sql = @"delete from person where id < 3";

        BOOL rec = [db executeUpdate:sql];

        if (rec) {

            NSLog(@"删除成功");

        }

    }

}

总结:
1、除查询以外的操作都成为更新;
2、使用FMDataBaseQueue在多线程下保证数据不至于混乱(另行研究);
    

0 0
原创粉丝点击