• 数据库


    • Plist(NSArrayNSDictionary) 只能存储字典数组等数据类型
    • Preference(偏好设置NSUserDefaults)同上
    • NSCoding(NSKeyedArchiverNSkeyedUnarchiver)可以存储对象数据类型
    • SQLite3 轻量级数据库  嵌入式移动端
    • Core Data 苹果官方数据库
     
     
    • FMDB是iOS平台的sqlite数据库框架,以OC的方式封装了sqlite的C语言API
    • 优点:使用起来更加面向对象,省去了很多麻烦,冗余的C语言代码,对比苹果自带的Core Data更加轻量级和灵活,提供了多线程安全的数据库操作方法,有效的防止数据混乱
     
    • FMDB有三个主要的类
      FMDatabase
      一个FMDatabase对象就代表一个单独的SQLite数据库
      用来执行SQL语句
       
      FMResultSet
      使用FMDatabase执行查询后的结果集
       
      FMDatabaseQueue
      用于在多线程中执行多个查询或更新,它是线程安全的
     
              
    • FMDatabase这个类是线程不安全的,如果在多个线程中同时使用一个FMDatabase实例,会造成数据混乱等问题
       
      为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类
     
    • 批量操作可以用transaction
     
     
        // 1.打开数据库
        NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"statuses.sqlite"];
        _db = [FMDatabase databaseWithPath:path];
        [_db open];
       
        // 2.创表
        [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_status (id integer PRIMARY KEY, status blob NOT NULL, idstr text NOT NULL);"];
     
    // 根据请求参数生成对应的查询SQL语句
        NSString *sql = nil;
        if (params[@"since_id"]) {
            sql = [NSString stringWithFormat:@"SELECT * FROM t_status WHERE idstr > %@ ORDER BY idstr DESC LIMIT 20;", params[@"since_id"]];
        } else if (params[@"max_id"]) {
            sql = [NSString stringWithFormat:@"SELECT * FROM t_status WHERE idstr <= %@ ORDER BY idstr DESC LIMIT 20;", params[@"max_id"]];
        } else {
            sql = @"SELECT * FROM t_status ORDER BY idstr DESC LIMIT 20;";
        }
       
        // 执行SQL
        FMResultSet *set = [_db executeQuery:sql];
        NSMutableArray *statuses = [NSMutableArray array];
        while (set.next) {
            NSData *statusData = [set objectForColumnName:@"status"];
            NSDictionary *status = [NSKeyedUnarchiver unarchiveObjectWithData:statusData];
            [statuses addObject:status];
        }
     
    // 插入数据
     NSData *statusData = [NSKeyedArchiver archivedDataWithRootObject:status];
            [_db executeUpdateWithFormat:@"INSERT INTO t_status(status, idstr) VALUES (%@, %@);", statusData, status[@"idstr"]];
     
     
  • 相关阅读:
    JS和Jquery获取this
    写SQL经验积累2
    转载学习
    java开发3个月总结
    学习规划
    Spring Boot详解
    webSocketDemo
    spring boot中 redis配置类(4.0)
    c语言操作字符串
    聊聊面试常问的HashMap中红黑树
  • 原文地址:https://www.cnblogs.com/sea-star3/p/5301090.html
Copyright © 2020-2023  润新知