iOS SQLite存储blob类型的data数据

本文详细介绍了如何将NSData类型的对象存入SQLite数据库中,包括插入和查询方法,以及数据类型转换的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天遇到一个问题,把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可以是任何类型的数据,可以存图片视频、音频等等,这样也是蛮灵活的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值