iOS第三方数据库FMDB使用方法
2023-03-15 22:08:28 时间
工程中经常需要使用数据库来保存一些数据在本地手机上,iOS是自带Sqlite的,但是常用的还是第三方的类库——FMDB。这里说一说基本的使用方法
对于数据库来说,最开始的当然是建立数据库,在使用数据库前,最好先检查一下数据库是否存在,如果存在,则把数据库实例指向已存在的那个数据库,如果不存在,则创建:
//SqlTest.h
@property (strong, nonatomic) FMDatabase *db;//数据库
————————————————————————————————
//SqlTest.m
if (!self.db) {//判断数据库是否存在,不存在则创建数据库
//获取文件路径
NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dbFilePath = [docs[0] stringByAppendingPathComponent:@"db.sqlite"];
//获取或创建数据库
self.db = [FMDatabase databaseWithPath:dbFilePath];
}
在找到或创建数据库后,打开一下数据库,如果打开失败,则提示并处理,打开后,为数据库设置缓存来提高查询效率:
if (![self.db open]) {//判断数据库是否打开,没打开则提示失败
NSLog(@"打开数据库失败");
return;
}
[self.db setShouldCacheStatements:YES];//为数据库设置缓存,提高查询效率
接下来的工作是建表,这里示例建立一个存储用户名和密码的表:同样的,在使用时,先检查数据库中是否有该表,有则跳过建表过程,没有则建表:
if (![self.db tableExists:@"user"]) {//判断user表是否存在,不存在则创建表
这里给id设置为自增并且为key
[self.db executeUpdate:@"CREATE TABLE user(_id INTEGER PRIMARY KEY, Username VARCHAR(50), Password VARCHAR(50))"];
NSLog(@"创建表成功");
}
有了表以后就可以对表中的数据进行增删改查了,先是添加数据到表中:
//向user表中添加一行用户名和密码分别为Cloudox和123456的数据
[self.db executeUpdate:@"INSERT INTO user (Username, Password) VALUES (?, ?)", @"Cloudox", @"123456"];
NSLog(@"添加数据成功");
添加了数据后可以进行查询:
//在user表中查询用户名为Cloudox的行数据
FMResultSet *rs = [self.db executeQuery:@"SELECT * FROM user WHERE Username = (?)", @"Cloudox"];
//循环读取所有搜索到的数据获取想要的列信息,这里只有一行,获取对应的密码
while ([rs next]) {
self.password = [rs stringForColumn:@"password"];
}
要修改某列的数据也很简单:
//修改用户名为Cloudox的行的密码
[self.db executeUpdate:@"UPDATE user SET Password = (?) WHERE Username = (?) ", "456789", "Cloudox"];
删除某行与修改某行类似:
//删除用户名为Cloudox的行
[self.db executeUpdate:@"DELETE FROM user WHERE Username = (?)", "Cloudox"];
如果想删除表中的所有数据,有一个快捷的方法可以清除表:
//清除名为user的表的所有数据
[self.db executeUpdate:@"DELETE FROM user"];
或者更彻底想要删除表也可以:
//删除名为user的表
[self.db executeUpdate:@"DROP TABLE user"];
或者再加大力度毁灭世界销毁数据库本身,这里用到的就不止是FMDB的方法了,而是用fileManager来直接删除文件:
NSError *error;
//创建文件管理器
NSFileManager *fileManager = [NSFileManager defaultManager];
//判断是否存在数据库文件,存在则删除
NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dbFilePath = [docs[0] stringByAppendingPathComponent:@"db.sqlite"];
if ([fileManager fileExistsAtPath:dbFilePath])
{
[self.db close]; //先关闭数据库再删除
//删除文件
[fileManager removeItemAtPath:dbFilePath error:&error];
}
至此,基本的用法都说到了,数据库都被销毁了,日后遇到了什么新的用法再来重建世界吧。
相关文章
- 容灾系列(六)——数据存储容灾建设
- 在真实环境中使用深度残余网络进行面部情感识别
- 基础网络云服务器&云数据库资源切换私有网络如何实现IP不变
- 实战篇:Oracle 配置透明网关访问 MySQL 详细教程
- 如何计算服务限流的配额
- 分区副本限流机制三部曲(源码篇)
- 「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化
- 云时代,我们到底需要怎样的数据库?
- OushuDB 学习经验分享(二):与HAWQ的区别
- Firestorm - 腾讯自研Remote Shuffle Service在Spark云原生场景的实践
- CancerSCEM: 人类癌症单细胞表达图谱数据库
- GT Transceiver中的RX功能块简述
- 我是如何赢得吴恩达首届 Data-centric AI 竞赛的?
- 一文速览 | 对话生成预训练模型
- 《云原生:运用容器、函数计算和数据构建下一代应用》
- SLAM中位姿估计的图优化方法比较
- 我是怎么用MySQL的
- 还在用分页?你out了 !试试 MyBatis 流式查询,真心强大!
- 深入分析 I/O 的工作机制
- WebClient 增删改查一文搞定