IOS数据持久化

      数据持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。在iOS开发中,我们一般使用以下方式持久化数据:1、plist文件(属性列表);2、preference(偏好设置NSUserDefaults);3、SQLite 3 (第三方FMDB);

1、plist文件:

      将某些特定的类,通过XML文件的方式保存在目录中。在iOS开发中通常用来存储用户设置,还可以用于存储程序中经常用到而不经常改动的数据。

只有下面的类型才能使用plist文件存储:NSArray;NSString;NSNumber;NSDictionary;NSDate;NSData;

NSMutableDictionary;NSMutableData;NSMutableString;NSMutableArray;

//1、获得文件路径

NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *fileName = [path stringByAppendingPathComponent:@"test.plist"];

//2、存储

 NSArray *array = @[@"123", @"456", @"789"];
    
 [array writeToFile:fileName atomically:YES];

//3、读取

NSArray *result = [NSArray arrayWithContentsOfFile:fileName];
NSLog(@"%@", result);

2、preference(偏好设置):(NSUserDefaults)

      使用偏好设置存储是一个方便快捷的方法,偏好设置的实质就是在底层封装了一个字典,生成的是一个plist文件,保存在libary-perferences这个目录下面。使用偏好设置的好处有两个:1.不需要关心文件名2.快捷做键值对存储。

    //1.获得NSUserDefaults文件
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    //2.向文件中写入内容
    [userDefaults setObject:username forKey:@"username"];
    [userDefaults setBool:YES forKey:@"sex"];
    [userDefaults setInteger:20 forKey:@"age"];
    //立即同步
    [userDefaults synchronize];
    //3.读取文件
    NSString *name = [userDefaults objectForKey:@"a"];
    BOOL sex = [userDefaults boolForKey:@"sex"];
    NSInteger age = [userDefaults integerForKey:@"age"];
    NSLog(@"%@, %d, %ld", name, sex, age);

3、SQLite3

      上面两种存储方法,都是覆盖存储。如果想要增加一条数据就必须把整个文件读出来,然后修改数据后再把整个内容覆盖写入文件。所以它们都不适合存储大量的内容。

     表面上SQLite将数据分为以下几种类型:integer : 整数;real : 实数(浮点数);text : 文本字符串;blob : 二进制数据,比如文件,图片之类的。实际上SQLite是无类型的。即不管你在创表时指定的字段类型是什么,存储是依然可以存储任意类型的数据。而且在创表时也可以不指定字段类型。SQLite之所以什么类型就是为了良好的编程规范和方便开发人员交流,所以平时在使用时最好设置正确的字段类型!主键必须设置成integer

      在iOS中要使用SQLite3,需要添加库文件:libsqlite3.dylib并导入主头文件,这是一个C语言的库,所以直接使用SQLite3还是比较麻烦的。不过一般开发过程中,使用的都是第三方开源库 FMDB,封装了这些基本的c语言方法,使得我们在使用时更加容易理解,提高开发效率。

      FMDB是iOS平台的SQLite数据库框架,它是以OC的方式封装了SQLite的C语言API,它相对于cocoa自带的C语言框架有如下的优点:1、使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码。2、对比Core Data框架,更加轻量级和灵活。3、提供了多线程安全的数据库操作方法,有效地防止数据混乱。

      FMDB有三个主要的类:1、FMDatabase:一个FMDatabase对象就代表一个单独的SQLite数据库,用来执行SQL语句。2、FMResultSet:使用FMDatabase执行查询后的结果集。3、FMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的。

      FMDB通过指定SQLite数据库文件路径来创建FMDatabase对象,使用之前一样需要导入sqlite3.dylib。

打开数据库方法:

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"student.db"];
    FMDatabase *database = [FMDatabase databaseWithPath:path];
    if (![database open]) {
        NSLog(@"数据库打开失败!");
    }

更新(executeUpdate):

    //常用方法有以下3种:
    - (BOOL)executeUpdate:(NSString*)sql, ...
    - (BOOL)executeUpdateWithFormat:(NSString*)format, ...
    - (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
    //示例
    [database executeUpdate:@"CREATE TABLE IF NOT EXISTS table_student(id integer primary key autoincrement, name text, age integer)"];

查询(executeQuery):

   //常用方法有以下3种:

    - (FMResultSet *)executeQuery:(NSString*)sql, ...
    - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
    - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments

    //查询示例

    //1.执行查询
    FMResultSet *result = [database executeQuery:@"SELECT * FROM table_student"];
    //2.遍历结果集
    while ([result next]) {
        NSString *name = [result stringForColumn:@"name"];
        int age = [result intForColumn:@"age"];
    }

 

 

转载于:https://my.oschina.net/Baidu1hao/blog/1587111

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值