fmdb实现sqlite数据库的增删改查功能(上)

移动端开发中许多地方需要用到一些数据持久化操作,比如将一些数据直接写入沙盒,存入偏好设置,归档等。但是有些时候需要把一些数据量稍微大一点的东西做本地的存储,比如用第三方环信做IM开发中我们需要将用户信息保存到移动端,所以就使用到了sqlite,一款在移动开发中经常用到的嵌入式数据库。

FMDB的介绍

如果我们使用原生方法操作数据库会涉及到很多c语音的api,对于习惯了面向对象的开发者们使用起来非常不方便,所以fmdb就对其做了一个封装。
fmdb中主要有三个类:
1、FMDatabase:用来执行开发者们写的sql
2、FMResultSet:保存FMDatabase执行的查询出来的结果
3、FMDatabaseQueue:此类是线程安全的,如果想在多线程中使用数据库要采用这个类

用FMDatabase操作数据库

1、创建全局的数据库实例,并进行实例化

// 懒加载创建数据库实例
- (FMDatabase *)db{
    if (!_db) {
        // 获取数据库创建路径
        NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"user.sqlite"];
        // 创建数据库
        _db = [FMDatabase databaseWithPath:filePath];
    }
    return _db;
}

2、创建对应的表,此案例中创建userInfo表,表中的字段为主键id,userid, name, age, sex, height, weight7个字段

// 创建表
- (BOOL)createTable{
    BOOL result;
    // 打开数据库,创建表
    if ([self.db open]) {
        result = [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS userInfo(id integer PRIMARY KEY, userid text NOT NULL, name text NOT NULL, age integer, sex integer, height integer, weight integer);"];
    }
    return result;
}

3、插入数据,传入字典,字典中存储的是一个用户的信息

// 插入数据
- (BOOL)inserUserInfoWithDict:(NSDictionary *)userDict{
    BOOL result;
    if ([self.db open]) {
        result = [self.db executeUpdateWithFormat:@"INSERT INTO userInfo(userid,name,age,sex,height,weight) VALUES(%@,%@,%ld,%ld,%ld,%ld)",userDict[@"userid"], userDict[@"name"], [userDict[@"age"] integerValue], [userDict[@"sex"] integerValue], [userDict[@"height"] integerValue], [userDict[@"weight"] integerValue]];
    }
    [self.db close];
    return result;
}

4、根据对应的userid查询对应的用户信息

// 查询用户信息,注意:即使查询出来的用户只有一个也必须调用[resultSet next]方法获取查询出来的数据
- (NSMutableArray *)queryUserInfoWithUserid:(NSString *)userid{
    NSMutableArray *userArr = [NSMutableArray array];
    if ([self.db open]) {
        FMResultSet *resultSet = [self.db executeQueryWithFormat:@"SELECT * FROM userInfo WHERE userid=%@", userid];
        while ([resultSet next]) {
            NSString *name = [resultSet stringForColumn:@"name"] ? : @"";
            NSInteger age = [resultSet intForColumn:@"age"];
            NSInteger sex = [resultSet intForColumn:@"sex"];
            NSInteger height = [resultSet intForColumn:@"height"];
            NSInteger weight = [resultSet intForColumn:@"weight"];
            NSDictionary *userDict = @{@"userid":userid, @"name":name, @"age":@(age), @"sex":@(sex), @"height":@(height), @"weight":@(weight)};
            [userArr addObject:userDict];
        }
    }
    [self.db close];
    return userArr;
}

5、修改对应userid用户的个人信息

// 修改用户信息
- (BOOL)updateUserInfo:(NSDictionary *)userDict userid:(NSString *)userid{
    BOOL result;
    NSString *name = userDict[@"name"] ? : @"";
    NSInteger age = [userDict[@"age"] integerValue];
    NSInteger sex = [userDict[@"sex"] integerValue];
    NSInteger height = [userDict[@"height"] integerValue];
    NSInteger weight = [userDict[@"weight"] integerValue];
    if ([self.db open]) {
        NSString *sq = [NSString stringWithFormat:@"UPDATE userInfo SET name='%@', age='%ld', sex='%ld', height='%ld', weight='%ld' WHERE userid='%@'", name, age, sex, height, weight, userid];
        result = [self.db executeUpdate:sq];
    }
    [self.db close];
    return result;
}

6、删除对应userid的用户

// 删除用户信息
- (BOOL)deleteUserInfoWithId:(NSString *)userid{
    BOOL result;
    if ([self.db open]) {
        NSString *sq = [NSString stringWithFormat:@"delete from userInfo where userid='%@'",userid];
        result = [self.db executeUpdate:sq];
    }
    [self.db close];
    return result;
}

结尾

以上为利用FMDatabase对sqlite数据库进行操作的方法,可以实现数据库的增删改查功能。下一篇文章将介绍使用FMDatabaseQueue解决多线程访问数据库时造成crash的问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值