IOS中sqlite数据库利用bold类型存储与读取字典
来源:互联网 发布:python 经典书籍 知乎 编辑:程序博客网 时间:2024/06/06 10:07
我在做app收藏时, 发现我的数据有的是字典, 字典怎么向数据库中保存呢? 就看了好多博客, 字典应该利用数据库中的bold类型来保存,可是添加到数据库之后,读取不出来, 为此伤透了脑筋,为了解决这个问题, 花费了好时间.
以前认为bold类型就是用来存放二进制的,可以存放图片等, 而我的数据存到数据库中的确是二进制,所以读的时候全是二进制, 以致不能转换成字典。后来发现我保存数据的方法就是错的, bold类型不仅可以放二进制也可以放数据,简直颠覆了我对bold类型的看法,BLOB,只是一个数据块,完全按照输入存放,并不是只能存放二进制。
存储字典(向数据库中写入):
先将字典转为NSData类型, 再往数据库中保存, 特别注意的是, NSData 数据不能使用 sql 语句插入,因为要向数据库中写入blob类型的二进制数据,还要写入数据的长度bytes, 所以在写sql语句时不要插入blob类型的数据,不多说,直接上例子:
sqlite3_stmt *stmt = nil;// NSDictionary 转 NSDataNSData *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]; }
1 0
- IOS中sqlite数据库利用bold类型存储与读取字典
- 利用Sqlite数据库的blob类型存储自定义的数据类型
- 利用Sqlite数据库的blob类型存储自定义的数据类型
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- 数据库中存储与读取文件
- iOS数据存储--SQLite数据库
- iOS中SQLite数据库云存储的实现
- 利用Sqlite数据库的blob类型存储自定义的数据类型(小寿转载)
- Android中SQLite数据库存储
- Android 数据存储与读取:SQLite
- Android 数据存储与读取:SQLite
- 测试用例的设计方法(全)
- OI算法汇总[大纲]
- 【BZOJ4385】[POI2015]Wilcze doły【单调队列】【前缀和】【Two Pointers】
- android---极光推送初步了解
- Critical Links(连通图 桥)
- IOS中sqlite数据库利用bold类型存储与读取字典
- leetcode---SortList
- 多传感器数据融合算法---9轴惯性传感器
- 有关QWidget的关闭close()
- Zigbee之旅(三):几个重要的CC2430基础实验——外部中断
- O'Reilly-现代php译文(1)
- CentOs中安装和配置vsftp简明教程
- 计算机视觉领域的一些牛人博客,研究机构等的网站链接
- 关于mybatis的insertintoselect命令未结束问题