FMDB在项目中的使用
一. 首先导入FMDB三方库:在podfile 文件中添 pod 'FMDB' 然后在终端cd 到你的项目文件中,pod install 命令。FMDB的下载地址
二. 在你需要的地方导入头文件:#import "FMDatabase.h"
代码
下面我会把FMDB的增、删、查、改放在一个工具类中,需要用到的地方直接用这个工具类的类方法去调用类方法。
- 首先我们肯定要去创建一个表。
// 建表
+ (void)creatPictureDB{
// document path
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
// pic 表的文件路劲
NSString *filePath = [path stringByAppendingString:@"/Picture.data"];
NSLog(@"Picture.data filePath is %@",filePath);
// 初始化数据库
FMDatabase *db = [FMDatabase databaseWithPath:filePath];
if ([db open]) // 想要对表进行操作,db 必须打开
{
// 创建表
BOOL result = [db executeUpdate:@"CREATE TABLE IF NOT EXISTS PictureDB (id integer PRIMARY KEY AUTOINCREMENT, image_id integer NOT NULL,create_time text NOT NULL,camera integer NOT NULL,thumb_name text NOT NULL,file_name text NOT NULL,posData text NOT NULL,addressStr text NOT NULL,like text NOT NULL,downLoad text NOT NULL,province text NOT NULL,city text NOT NULL,district text NOT NULL);"]; // 这里是你这个表对应的model 的属性
if (result){
NSLog(@"创建表成功");
}else{
NSLog(@"创建表失败");
}
}
}
- 插入数据
// 插入数据
+ (void)insertPictureInPictureDB:(PictureDBModel*)pic{
// 这里需要拿到db
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingString:@"/Picture.data"];
FMDatabase *db = [FMDatabase databaseWithPath:filePath];
// 将地理位置数组转换成json 字符串
NSString *locationArrString = [pic.posData mj_JSONString]; // 这里是一个数据,需要先将数组转换乘json 串
if ([db open]){ // 如果有这个数据了。就不要添加进去了
FMResultSet *rs = [db executeQuery:@"SELECT * FROM PictureDB WHERE file_name = ?",pic.file_name];
while ([rs next]) {
NSLog(@"有这个数据了。不要加进来");
return;
}
BOOL result = [db executeUpdate:@"INSERT INTO PictureDB (image_id, create_time, camera, thumb_name, file_name, posData, addressStr, like, downLoad, province, city, district) VALUES(?,?,?,?,?,?,?,?,?,?,?,?);" withArgumentsInArray:@[@(pic.image_id),pic.create_time,@(pic.camera),pic.thumb_name,pic.file_name,locationArrString,pic.addressStr,pic.like,pic.downLoad,pic.province,pic.city,pic.district]];
if (result){
// NSLog(@"插入数据成功");
}else{
NSLog(@"插入数据失败");
}
}
}
- 根据条件查找数据
// 根据条件查找
+ (NSMutableArray *)checkDBWithStr:(NSString *)str{
NSMutableArray * resultArr = [NSMutableArray new];
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingString:@"/Picture.data"];
FMDatabase *db = [FMDatabase databaseWithPath:path];
if ([db open]){
FMResultSet *rs = [db executeQuery:[NSString stringWithFormat:@"select * from PictureDB where addressStr like '%@%%' or addressStr like '%%%@%%'",str,str]];
FMResultSet *rs1 = [db executeQuery:[NSString stringWithFormat:@"select * from PictureDB where create_time like'%@%%' or create_time like '%%%@%%'",str,str]];
while ([rs next]) {
PictureDBModel *model = [[PictureDBModel alloc] init];
model.image_id = [[rs stringForColumn:@"image_id"] intValue];
model.create_time = [rs stringForColumn:@"create_time"];
model.camera = [[rs stringForColumn:@"camera"] intValue];
model.thumb_name = [rs stringForColumn:@"thumb_name"];
model.file_name = [rs stringForColumn:@"file_name"];
model.posData = [rs stringForColumn:@"posData"];
model.posDataArr = [PictureDBTool toArrayOrNSDictionary:[rs stringForColumn:@"posData"] ? [rs stringForColumn:@"posData"]:@""];
model.addressStr = [rs stringForColumn:@"addressStr"];
model.province = [rs stringForColumn:@"province"];
model.city = [rs stringForColumn:@"city"];
model.district = [rs stringForColumn:@"district"];
model.like = [rs stringForColumn:@"like"];
model.downLoad = [rs stringForColumn:@"downLoad"];
[resultArr addObject:model];
}
while ([rs1 next]) {
PictureDBModel *model = [[PictureDBModel alloc] init];
model.image_id = [[rs1 stringForColumn:@"image_id"] intValue];
model.create_time = [rs1 stringForColumn:@"create_time"];
model.camera = [[rs1 stringForColumn:@"camera"] intValue];
model.thumb_name = [rs1 stringForColumn:@"thumb_name"];
model.file_name = [rs1 stringForColumn:@"file_name"];
model.posData = [rs1 stringForColumn:@"posData"];
model.posDataArr = [PictureDBTool toArrayOrNSDictionary:[rs1 stringForColumn:@"posData"]? [rs1 stringForColumn:@"posData"]:@""];
model.addressStr = [rs1 stringForColumn:@"addressStr"];
model.province = [rs1 stringForColumn:@"province"];
model.city = [rs1 stringForColumn:@"city"];
model.district = [rs1 stringForColumn:@"district"];
model.like = [rs stringForColumn:@"like"];
model.downLoad = [rs stringForColumn:@"downLoad"];
[resultArr addObject:model];
}
}
return resultArr;
}
// 我这里是有2个查找的条件,一个是地址,一个是时间。你可以根据自己的需求来筛选。
4.根据自己的需求修改表中数据
// 修改数据
+ (void)downLoadPictureWithFileName:(NSString *)filePath{
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject stringByAppendingString:@"/Picture.data"];
FMDatabase *db = [FMDatabase databaseWithPath:path];
if ([db open]){
BOOL result = [db executeUpdate:@"update PictureDB set downLoad = ? where file_name = ?",@"1",filePath];
if (result){
NSLog(@"修改数据成功");
[AlertView alertViewWithTitle:@"添加本地相册成功"];
}else{
NSLog(@"修改数据失败");
[AlertView alertViewWithTitle:@"添加本地相册失败"];
}
}
}
- 删除表
删除表的sql 语句是:" DROP TABLE IF EXISTS PictureDB"
小结
- 上面的代码是我项目中用到的,效仿时只需要稍微修改就行了,对FMDB的使用主要是对sql 语句的操作。
---来自涛胖子的工作笔记
网友评论