Ios自己面试总结第三方库的使用征服iOS

FMDB

2016-04-26  本文已影响534人  箫声_筱昇

FMDB

  • 第三方的框架.它是对 libsqlite2框架的封装.使用方法与 sqlite 类似.并且它是对于多线程的并发操作进行了处理,所以线程是安全的.是一款简洁/易用的封装库.

优点

缺点

FMDB 中重要的类:

在使用FMDB 时,要使用终端进行导入.

@interface RootViewController ()
@property (nonatomic, strong) FMDatabase *database;//声明 database 属性.
@end

- (void)viewDidLoad {
    [super viewDidLoad];
    //建表操作
    [self opertationNoResultWithSql:@"create table if not exists student(name text primary key ,sex text,age integer)" operationTag:@"建表"];
    [self opertationNoResultWithSql:@"insert into student(name,sex,age) values ('张丽','女',23)" operationTag:@"插入数据"];
    [self opertationNoResultWithSql:@"alter table student add number integer" operationTag:@"在插入一列表"];
    
    NSArray *array = [self qureyWithSql:@"select * from student"];
    NSLog(@"%@",array);
    /**
     *  1,有一个路径来存储数据库文件
     *  2,创建数据库文件
     *  3,增删改查的操作
     *  1)通过 FMDB ,能不能动态获得一张表有多少个字段
     *  2)FMDB 中,能不能动态获得某一个字段的类型.
        3)FMDB 中,能不能动态获得字段的名称.
     */
}
- (NSString *)dbPath{
NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject)];
NSLog(@"%@",doc);
NSString *documents = [doc stringByAppendingPathComponent:@"fmdb.sqlite"];
return documents;
}
- (FMDatabase *)openOrCreateDB{
/**
  *  此写法可以确保self.database = [FMDatabase databaseWithPath:[self dbPath]];
  *  只会被执行一次.不会在程序每次运行时,进行多次创建.
  */
static dispatch_once_t onceToken;
dispatch-once(&onceToken,^{
self.database = [FMDatabase databaseWithPath:[self dbPath];
});
//打开数据库
if([self.database open]){
NSLog(@"打开成功");
return self.database;
}else{
NSLog(@"数据库打开失败");
return nil;
}
}
-(BOOL)opertationNoResultWithSql:(NSString *)sql operationTag:(NSString *)tag{
    //打开数据库
    FMDatabase *db = [self openOrCreateDB];
    //执行非查询操作
    BOOL isSuccess = [db executeUpdate:sql];
    /**
     *  当操作完成,关闭数据库
     */
    [db close];
    if (isSuccess) {
        NSLog(@"%@操作成功",tag);
        return YES;
    }else{
        NSLog(@"%@操作失败",tag);
        return NO;
    }
}
- (NSArray*)qureyWithSql:(NSString *)sql{
    //打开数据库
    FMDatabase *db = [self openOrCreateDB];
    /**
     *  执行操作
     * 1,执行sql 语句,将返回结果先暂存到 resultSet 中
     */
    FMResultSet *resultSet = [db executeQuery:sql];
    //2,从 resultSet 中取出每一条记录
    /**
     *  next:做的是 sqlite3_step(stament) == row进行判断;
     */
    NSMutableArray *array = [[NSMutableArray alloc] init];
    while ([resultSet next]) {
        /**
         *  当字典建立在循环外面的时候.只是初始化一次.然而后面在进行查询的额时候,会
         *  将前面的结果给覆盖掉.所以子啊每次执行 while 循环的时候,都是
         *  一个新的记录被取出,所以我们需要一个新的字典来盛放新的记录.所有我们进
         *  while 循环的时候都需要构建一个新的字典对象.
         */
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        NSString *name = [resultSet stringForColumn:@"name"];
        [dict setObject:name forKey:@"name"];
        NSString *sex = [resultSet stringForColumn:@"sex"];
        [dict setObject:sex forKey:@"sex"];
        int age = [resultSet intForColumn:@"age"];
        [dict setObject:@(age) forKey:@"age"];
        int number = [resultSet intForColumn:@"number"];
        [dict setObject:@(number) forKey:@"number"];
        //将字典添加到数组中.
        [array addObject:dict];
    }
    //释放 resultSet
    [resultSet close];
    [db close];//关闭数据库.
return array;
}
上一篇下一篇

猜你喜欢

热点阅读