最近接到一个本地在线答题系统的项目要求前端使用数据库实现功能,在这里大体吧使用到的东西做一些总结希望可能会帮到遇到同样问题的朋友
1.首先介绍一下FMDB的基本使用功能
(1)创建数据库
NSString *path = [NSHomeDirectory() stringByAppendingString:@"/Documents/test.sqlite"];
NSLog(@"path-->%@",path);
_fm = [[FMDatabase alloc]initWithPath:path];
if (_fm.open == NO)
{
NSLog(@"我的数据库打开失败");
return;
}
NSLog(@"我的数据库打开成功%@",path);
(2)建表
BOOL isSucceed= [_fm executeUpdate:@"create table app (name,sex,age)"];
//以上方法执行的步骤是,没有表格就创建,有表格,就创建失败
if (isSucceed) {
NSLog(@"表格创建成功");
}else{
NSLog(@"表格已存在");
}
(3)插入
//当批量添加数据,其中一个数据插入失败,前面的数据都要取消插入。就需要开启一个事务来进行管理
[_fm beginTransaction];
NSNumber*num=[NSNumber numberWithInt:arc4random()%18];
BOOL isSucceed= [_fm executeUpdate:@"Insert into app values(?,?,?)",@"小三",@"女",num];
if (isSucceed) {
NSLog(@"啊~已经列入名单了");
}else{
NSLog(@"她跑了");
}
//如果其中一个数据出错,前面数据都取消插入
//如果没有错误,进行提交,完成所有插入
//事务可以让你的数据保持一致性和完整性
if(isSucceed==YES){
[_fm commit];
}else{
[_fm rollback];
(4)删除数据
BOOL isSucceed=[_fm executeUpdate:@"delete from app where sex=?",@"女"];
if (isSucceed) {
NSLog(@"删除成功");
}else{
NSLog(@"删除失败");
}
(5)更新数据
BOOL isSucceed=[_fm executeUpdate:@"update app set sex=? where sex=?",@"男",@"女"];
if (isSucceed) {
NSLog(@"更新成功");
}else{
NSLog(@"更新失败");
}
//select * from app 默认全部返回所有结果 *为通配符 where可以进行筛选
FMResultSet*set=[_fm executeQuery:@"select * from app where sex=?",@"女"];
//FMResultSet类似链表 他的头节点为空,所以你循环每次必定为空
//记录整体表格
self.dataArray=[NSMutableArray arrayWithCapacity:0];
while ([set next]) {
//每一行的数据
NSString*name=[set stringForColumn:@"name"];
NSString*age=[set stringForColumn:@"age"];
NSString*sex=[set stringForColumn:@"sex"];
//如果要读取图片
// NSData*data=[set dataForColumn:@"图片"];
//记录每一行的数据
NSArray*temp=@[name,age,sex];
//把每一行的数据加入到整体的表格中
[self.dataArray addObject:temp];
}
2.下面是进阶部分
(1)like语句--模糊字眼
NSString *sql = @"delete from web_note where video_url like '%mp4%'";
(2)当我们直接引用别人的数据库的时候我们是不能在当前的数据库上做修改的我们这时候就需要将基于别人的db文件创立的数据库单独拿出来复制一份,所以复制数据库也是比较常用的操作之一
NSString *oldPath = [[NSBundle mainBundle]pathForResource:@"jxedt_user.sqlite" ofType:nil];
NSString *newPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/test.sqlite"];
//复制数据库
BOOL b = [fm copyItemAtPath:oldPath toPath:newPath error:nil];
NSLog(@"是否复制成功=======%d",b);
(3)下面我们介绍的就是删除命令中两个不是很常用的Drop和Truncate
drop:直接删除的是表结构 彻底删除 命令:
truncate:只是删除表中的数据保留表结构 命令:truncate table tb 不支持条件删除和单行删除效率比delete快,用来清空表数据
delete:删除表数据保留表结构,系统一行一行的执行效率比较低,可以添加条件删除delete tab where ID = ?
(4)过滤重复信息
未完以后抽时间更新一下