FMDB

279 阅读2分钟

FMDB是一个轻量级的数据库,也是对iOS相关SQLite的API进行封装的第三方库,使用者只需调用该框架的API就能很方便的进行本地数据库的操作。

重要的几个类:

  • RedFMDatabase:一个FMDatabase对象就代表一个单独的SQLite数据库(注意并不是表),用来执行SQL语句
  • RedFMResultSet:使用FMDatabase执行查询后的结果集
  • RedFMDatabaseQueue:用于在多线程中执行多个查询或更新,它是线程安全的

第一步

使用cocoapods导入FMDB,如果小伙伴们还不会使用cocoapods,赶快点击链接安装吧。

第二步

导入libsqlite3.0框架,导入头文件FMDatabase.h

第三步代码:


#pragma mark -创建数据库和表
- (IBAction)addData:(id)sender {
  _docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
  NSLog(@"%@",_docPath);
  NSString *fileName = [_docPath stringByAppendingPathComponent:@"hobbies.sqlite"];
  _db = [FMDatabase databaseWithPath:fileName];
  if ([_db open]) {
      NSLog(@"打开数据库成功");
  } else {
      NSLog(@"打开数据库失败");
  }
  BOOL result = [_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_hobbies (id integer NOT NULL, name text NOT NULL, sex text NOT NULL, hobbies integer NOT NULL);"];
    if (result) {
        NSLog(@"创建表成功");
    } else {
        NSLog(@"创建表失败");
    }
}

#pragma mark -添加数据
- (IBAction)addData:(id)sender {
    NSLog(@"添加数据");
    NSString *name = [NSString stringWithFormat:@"呛水的鱼%@",i];
    NSString *sex = @"未知";
    NSString *hobbies = @"不晓得";
    BOOL result = [_db executeUpdate:@"INSERT INTO t_student (id, name, sex, hobbies) VALUES (?,?,?,?)",@(i),name,sex,hobbies];
    if (result) {
        NSLog(@"添加数据成功");
    } else {
        NSLog(@"添加数据失败");
    }
}

#pragma mark - 修改数据
- (IBAction)modifyData:(id)sender {
    NSLog(@"修改数据");
    NSString *newHobbies = @"吐泡泡";
    NSString *oldHobbies = @"不晓得";
    BOOL result = [_db executeUpdate:@"update t_student set hobbies = ? where hobbies = ?",newHobbies,oldHobbies];
    if (result) {
        NSLog(@"修改成功");
    } else {
        NSLog(@"修改失败");
    }
}

#pragma mark - 删除数据
- (IBAction)deleteData:(id)sender {
    NSLog(@"删除数据");
    BOOL result = [_db executeUpdateWithFormat:@"delete from t_student where sex = %@",@"未知"];
    if (result) {
        NSLog(@"删除成功");
    } else {
        NSLog(@"删除失败");
    }
}

#pragma mark - 删除表
- (IBAction)deleteTable:(id)sender {
    NSLog(@"删除表");
    BOOL result = [_db executeUpdate:@"drop table if exists t_student"];
    if (result) {
        NSLog(@"删除表成功");
    } else {
        NSLog(@"删除表失败");
    }
}

#pragma mark - 查询数据
- (IBAction)queryData:(id)sender {
    NSLog(@"查询数据");
    FMResultSet *resultSet = [_db executeQuery:@"select * from t_student"];
    while ([resultSet next]) {
        int idNum = [resultSet intForColumn:@"id"];
        NSString *name = [resultSet objectForKeyedSubscript:@"name"];
        NSString *sex = [resultSet objectForKeyedSubscript:@"sex"];
        NSString *hobbies = [resultSet objectForKeyedSubscript:@"hobbies"];
        NSLog(@"编号:%@ 姓名:%@ 性别:%@ 爱好:%@",@(idNum),name,sex,hobbies);
    }
}

总结

以上就是基本的使用方法,希望大家可以看明白,如何不足之处还望大家及时指出,我将会在第一时间更正。此篇文章会不断完善更新,争取做到把我对FMDB的理解介绍的最详细。目前demo的线程安全我还没有考虑,我之后会补上,demo也会及时更新。demo以上传至github可供大家下载demo传送门