IT技术互动交流平台

IOS中sqlite数据库利用bold类型存储与读取字典

来源:IT165收集  发布日期:2016-05-09 21:54:20

我在做app收藏时, 发现我的数据有的是字典, 字典怎么向数据库中保存呢? 就看了好多博客, 字典应该利用数据库中的bold类型来保存,可是添加到数据库之后,读取不出来, 为此伤透了脑筋,为了解决这个问题, 花费了好时间.

以前认为bold类型就是用来存放二进制的,可以存放图片等, 而我的数据存到数据库中的确是二进制,所以读的时候全是二进制, 以致不能转换成字典。后来发现我保存数据的方法就是错的, bold类型不仅可以放二进制也可以放数据,简直颠覆了我对bold类型的看法,BLOB,只是一个数据块,完全按照输入存放,并不是只能存放二进制。

存储字典(向数据库中写入):

先将字典转为NSData类型, 再往数据库中保存, 特别注意的是, NSData 数据不能使用 sql 语句插入,因为要向数据库中写入blob类型的二进制数据,还要写入数据的长度bytes, 所以在写sql语句时不要插入blob类型的数据,不多说,直接上例子:

 sqlite3_stmt *stmt = nil;
// NSDictionary 转 NSData
NSData *data = [NSJSONSerialization dataWithJSONObject:[[List initWithList:list] objectForKey:@'cover_image'] options:NSJSONWritingPrettyPrinted  error:nil];
// 添加其他字段可以用这个insert 方法
 NSString *sqlstr = [NSString stringWithFormat:@'insert into hjl_list(Id, title, actual_count, collectors_count) values('%@', '%@', '%@', '%@')', list.Id, list.title, list.actual_count, list.collectors_count];
//sql的update语句,为了写入 blob类型的数据
NSString *sqlstr_data = [NSString stringWithFormat:@'update hjl_list set cover_img=? where Id='%@'', list.Id]; 
int result = sqlite3_exec(db, [sqlstr UTF8String], nil, nil, nil);
// 执行 update 语句
int result2 = sqlite3_prepare(db, [sqlstr_data UTF8String], -1, &stmt, nil);
if (result == SQLITE_OK && result2 == SQLITE_OK) {
      // 使用 sqlite3_bind_blob64 语句用绑定的方式插入数据,查询的时候 bytes 才正确
        sqlite3_bind_blob64(stmt, 1, [data bytes], [data length], nil);        
        if (sqlite3_step(stmt) == SQLITE_DONE) {
            NSLog(@'添加成功');
        }        
        return YES;
    }
    NSLog(@'%@ 失败',sqlstr);
    return  NO;

读取数据(从数据库中读取):

sqlite3 *db = [DB openDataBase];
    sqlite3_stmt *stmt = nil;
    NSString *sqlstr = [NSString stringWithFormat:@'select * from hjl_list'];
    int result = sqlite3_prepare(db, [sqlstr UTF8String], -1, &stmt, nil);
    if (result == SQLITE_OK) {
        while (sqlite3_step(stmt) == SQLITE_ROW) {
         const void *op = sqlite3_column_blob(stmt, 4);
            int size = sqlite3_column_bytes(stmt, 4);
            NSData *data = [NSData dataWithBytes:op length:size];

// 这里的dic就是从数据库中读取的字典
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

            }
Tag标签: 字典   类型   数据库  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规