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 = [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];

}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值