您的位置:首页 > 数据库

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

2017-04-09 14:26 387 查看
移动端开发中许多地方需要用到一些数据持久化操作,比如将一些数据直接写入沙盒,存入偏好设置,归档等。但是有些时候需要把一些数据量稍微大一点的东西做本地的存储,比如用第三方环信做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的问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sqlite fmdb ios 数据库