iOS FMDB保存图片

转载自: http://www.voidcn.com/article/p-hshycwaa-yb.html

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 = [FMDatabase databaseWithPath:fileName];

}

//创建表

- (void) createTable {

    if ([_db open]) {

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

        BOOL bResult = [_db executeUpdate:sql];

        

        if(bResult) {

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

        }

        else {

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

        }

        [_db close];

    }

}

//插入数据

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

    if ([_db open]) {

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

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

//*

 //注意:

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

 

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

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

 //  BOOL bResult = [_db executeUpdate:sql];

*/

 

        if(bResult) {

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

        }

        else {

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

        }

    }

    [_db close];

}

 

//获取数据

- (void) getData {

    if ([_db open]) {

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

        FMResultSet *resultSet = [_db executeQuery: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 = [UIImage imageWithData:data];

         }

    }

    [_db close];

}

展开阅读全文

没有更多推荐了,返回首页