数据库

  • Plist(NSArray\NSDictionary) 只能存储字典数组等数据类型
  • Preference(偏好设置\NSUserDefaults)同上
  • NSCoding(NSKeyedArchiver\NSkeyedUnarchiver)可以存储对象数据类型
  • 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"]];
 
 

posted on 2016-03-21 11:14  sea_star3  阅读(432)  评论(0编辑  收藏  举报

导航