fmdb实现sqlite数据库的增删改查功能(上)
2017-04-09 14:26
387 查看
移动端开发中许多地方需要用到一些数据持久化操作,比如将一些数据直接写入沙盒,存入偏好设置,归档等。但是有些时候需要把一些数据量稍微大一点的东西做本地的存储,比如用第三方环信做IM开发中我们需要将用户信息保存到移动端,所以就使用到了sqlite,一款在移动开发中经常用到的嵌入式数据库。
fmdb中主要有三个类:
1、FMDatabase:用来执行开发者们写的sql
2、FMResultSet:保存FMDatabase执行的查询出来的结果
3、FMDatabaseQueue:此类是线程安全的,如果想在多线程中使用数据库要采用这个类
2、创建对应的表,此案例中创建userInfo表,表中的字段为主键id,userid, name, age, sex, height, weight7个字段
3、插入数据,传入字典,字典中存储的是一个用户的信息
4、根据对应的userid查询对应的用户信息
5、修改对应userid用户的个人信息
6、删除对应userid的用户
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的问题相关文章推荐
- fmdb实现sqlite数据库的增删改查功能(下)
- C# WinForm 实现增删改查等功能(Access版) 系列之一
- C# WinForm 实现增删改查等功能(Access版) 系列之二
- ASP.NET实现增删改查等功能(Access版)
- ASP.NET实现增删改查等功能(Access版)系统之五-更新
- ASP.NET实现增删改查等功能(Access版)系统之四-删除
- 处女篇:ObjectDataSource+CodeSmith实现基础增删改查功能
- ASP.NET实现增删改查等功能(Access版)系统之三-分页及排序
- C# WinForm 实现增删改查等功能(Access版) 系列之七-图片处理
- C# WinForm 实现增删改查等功能(Access版) 系列之六-分页
- ASP.NET实现增删改查等功能(Access版)系统之一
- 学生信息记录系统,主要实现增删改查功能,考虑用堆栈、队列来写下
- C# WinForm 实现增删改查等功能(Access版) 系列之七-图片处理
- C# WinForm 实现增删改查等功能(Access版) 系列之六-分页
- C# WinForm 实现增删改查等功能(Access版) 系列之五-查询
- C# WinForm 实现增删改查等功能(Access版) 系列之八-导出数据到Excel
- 学生信息记录系统,主要实现增删改查功能
- C# WinForm 实现增删改查等功能(Access版) 系列之四
- ASP.NET实现增删改查等功能(Access版)系统之二-gridview绑定数据及行绑定
- ASP.NET实现增删改查等功能(Access版)系统之二-GridView绑定数据.