iOS开发FMDB保存图片

释放双眼,带上耳机,听听看~!

FMDB是对sqlite的封装,把面向过程,c接口封装成了大家熟悉的oc接口,并且对sqlite中令人头疼的线程安全做了处理,当然不变的是还是跟sqlite一样,需要我们写NSString类型的sql语句,一不小心拼错了,检查各大半天,小吐槽一下。

言归正传,FMDB是没有图片类型的字段的,但是提供了更灵活地方法:blob类型,也就是二进制,所以我们只要把图片转化为NSData就可以存放了。

下面是存放学生信息的例子(名字,年龄,性别,头像), 分别为字符串(text),整形(integer),字符串(text),二进制(blob),关键就是blob这个类型

//创建数据库

- (void) createDB {

    NSString *docmentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) firstObject];

    NSString *fileName = [docmentDir
stringByAppendingPathComponent:@"wqm.db"];

    

    _db = [FMDatabasedatabaseWithPath:fileName];

}

 

//创建表


- (void) createTable {

    if ([_dbopen]) {

        NSString *sql =
@"CREATE TABLE IF NOT EXISTS student(name text, age integer, sex text, avtar blob);"; //头像是blob类型

        BOOL bResult = [_dbexecuteUpdate:sql];

        

        if(bResult) {

            NSLog(@"表创建成功!");

        }

        else {

            NSLog(@"表创建失败!");

        }

        [_dbclose];

    }

}

 

//插入数据


- (void) addData:(NSString *)name age:(NSInteger) age sex:(NSString
*)sex avtar:(NSData*)data{

    if ([_dbopen]) {

        NSString *sql =@"INSERT INTO student(name, age, sex, avtar) VALUES (?, ?, ?, ?)";

        BOOL bResult = [_dbexecuteUpdate:sql, name,
@(age), sex, data]; 

 

//*

//注意:

//1、使用executeUpdate:sql的参数必须是NSObject类型(见上面的age),否者会报EXC_BAD_ACCESS

 

//2、上面的语句不要这么写,这么写是无法保存二进制的(没二进制数据的时候是可以)

//  NSString *sql = [NSStringstringWithFormat:@"INSERT INTO student(name, age, sex, avtar) VALUES ('%@', '%ld', '%@', '%@')", name, (long)age,
 //sex, data];

 //  BOOL bResult = [_dbexecuteUpdate:sql];

*/




        if(bResult) {

            NSLog(@"数据插入成功!");

        }

        else {

            NSLog(@"数据插入失败!");

        }

    }

    [_db
close];

}

 

//获取数据

- (void) getData {

    if ([_dbopen]) {

        NSString *sql = [NSStringstringWithFormat:@"SELECT * FROM student"];

        FMResultSet *resultSet = [_dbexecuteQuery:sql];

        

        while ([resultSet
next]) {

            NSString *name = [resultSet
stringForColumn:@"name"];

            NSInteger age = [resultSet
intForColumn:@"age"];

            NSString *sex = [resultSet
stringForColumn:@"sex"];

            NSData *data = [resultSet
dataForColumn:@"avtar"];

            //UIImage *image = [UIImageimageWithData:data];

         }

    }

    [_dbclose];

}

 

 

人已赞赏
iOS文章

iOS开发音频和视频合成(视频带背景音)

2020-1-29 15:58:55

iOS文章

iOS开发swift字典如何使用

2020-1-29 16:18:00

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索