iOS SQLite存储blob类型的data数据

来源:互联网 发布:南方全站仪pts数据 编辑:程序博客网 时间:2024/04/30 13:49

今天遇到一个问题,把NSData类型存到数据库,但是之前没有这么干过,所以也不知道是怎么操作的。

之前往数据库里存的都是int、 NSString这种类型,对应的就是C语言的int 、和字符串。

NSString 是OC的对象类型,想存数据库,必须先转一下再存,例如:[str UTF8String] 这样转成const char* 就可以赋值了

但是NSDate对应的是什么类型呢?

NSDate 对应的是我们平时很不常用的 bytes 类型,我一时没记起来,这不赖我········

好吧,我还是觉得代码比较直接,上代码

插入的时候:

#program -mark 这是插入的方法,参数为两个字段的内容,第二个是data类型+ (BOOL)insertClassification:(NSString *)Classification AndData:(NSData *)data{    //插入语句    NSString *insertClassification=@"insert into Commodity(CommodityClassification,JSON) values(?,?)";    sqlite3 *db=[self openDB];    sqlite3_stmt *stmt=nil;    int stat=sqlite3_prepare_v2(db, [insertClassification UTF8String], -1, &stmt, nil);    if (stat==SQLITE_OK) {        sqlite3_bind_text(stmt, 1, [Classification UTF8String], -1, NULL);        // 用data 调用bytes函数,并且获得长度。这里的长度一定要设置,不然的话数据会不正确        sqlite3_bind_blob(stmt, 2, [data bytes], (int)[data length] , NULL);        //好了,这一步就绑定了,是不是也挺简单的        int result = sqlite3_step(stmt);        if (result==SQLITE_DONE) {            //进到该if语句说明已经添加成功            return YES;        }    }    return NO;}

查询的时候:

+ (NSMutableDictionary *)selectClassification:(NSString *)Classification{    NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];    NSString *selectClassification=@"select * from Commodity where CommodityClassification like ?";    sqlite3 *db=[self openDB];    sqlite3_stmt *stmt=nil;    int stat=sqlite3_prepare_v2(db, [selectClassification UTF8String], -1, &stmt, nil);    if (stat==SQLITE_OK) {        sqlite3_bind_text(stmt, 1, [Classification UTF8String], -1, nil);        while (SQLITE_ROW==sqlite3_step(stmt)) {            //得到记录中的BLOB字段            const void * test = sqlite3_column_blob(stmt, 2);            //得到字段中数据的长度            int size = sqlite3_column_bytes(stmt, 2);            //根据字节和长度得到data对象            NSData *data = [[NSData alloc]initWithBytes:test length:size];            [dic setObject:data forKey:Classification];        }    }    return dic;}

就是这样,data可以是任何类型的数据,可以存图片视频、音频等等,这样也是蛮灵活的

0 0