怎么向数据库中存取data的数据
来源:互联网 发布:网络红人妖妃娘娘 编辑:程序博客网 时间:2024/04/20 10:11
iOS中操作数据库可以很方便的存取数据,怎么打开关闭数据库,数据库的增删改查就不做赘述,数据库插入data比较特殊(data的存储类型为blob(二进制))拿出来单独分享一下.
一般插入的data都是有model归档的数据,这样就能很方面整体操作model
例如.有一个Perso类,属性为(ID, name, gender, age),实例化出来一个对象,然后把该对象进行归档
1.首先把归档写成一个方法,在数据插入的时候调用
// 归档- (NSData *)dataOfArchiverObject:(id)object forKey:(NSString *)key{ NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:object forKey:key]; [archiver finishEncoding]; [archiver release]; return data;}}
2.然后把数据库的插入写成一个方法
- (void)insertWithPerson:(Person *)person{ // 打开数据库 db = [self openDataBase]; // 声明跟随指针 sqlite3_stmt *stmt = nil; // 将ID和person一起插入数据库 NSString *sql = @"insert into PersonList (ID, data) values (?, ?)"; int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@"添加成功"); // 绑定 sqlite3_bind_text(stmt, 1, person.ID.UTF8String, -1, NULL); // 将person先进行归档转化为data,用ID最为键值 NSData *data = [[FileHandle shareInstance] dataOfArchiverObject:person forKey:person.ID]; // 因为data比较特殊,第三个参数长度的时候不能用-1,必须写data的实际长度 sqlite3_bind_blob(stmt, 4, [data bytes],(int)[data length], NULL); // 释放跟随指针 sqlite3_finalize(stmt); } else { NSLog(@"添加失败"); } // 关闭数据库 [self closeDataBase];}
3.取出插入的data,首先也是先写反归档的方法
// 反归档- (id)unarchiverObject:(NSData *)data forKey:(NSString *)key{ NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; id object = [unarchiver decodeObjectForKey:key]; [unarchiver finishDecoding]; return object;}
4.根据ID取出数据库中的data
- (Person *)queryPersonWithID:(NSString *)ID{ db = [self openDataBase]; NSString *sql = [NSString stringWithFormat:@"select data from PersonList where ID = '%@'", ID]; sqlite3_stmt *stmt = nil; int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL); Person *model = nil; if (result == SQLITE_OK) { NSLog(@"查询成功"); sqlite3_bind_text(stmt, 1, ID.UTF8String, -1, NULL); while (sqlite3_step(stmt) == SQLITE_ROW) { NSData *data = [NSData dataWithBytes:sqlite3_column_blob(stmt, 0) length:sqlite3_column_bytes(stmt, 0)]; // 反归档把model取出来 model = [[FileHandle shareInstance] unarchiverObject:data forKey:ID]; } } else { NSLog(@"查询失败"); } sqlite3_finalize(stmt); [self closeDataBase]; return model;}
这样可以在数据中很方面整体存取data了
0 0
- 怎么向数据库中存取data的数据
- 怎么向数据库中存数据
- 向sql数据库中存取照片
- 向数据库中存取图片(BITMAP)
- SSH框架中向数据库存取图片
- 向数据库中存取图片(BITMAP)
- 数据库应用程序开发中图像数据的存取技术
- 数据库应用程序开发中图像数据的存取技术
- 数据库应用程序开发中图像数据的存取技术
- iOS应用数据存取之数据库存储-----Core Data
- 数据库中图片的存取
- vb.net中向SQLSERVE数据库存取图片(流的形式)
- Python中数据的存取
- 使用Hibernate向MySQL数据库中存取文件
- 用ASP.NET向数据库中存取图片
- Java向数据库中插入数据出错时怎么避免插入错误数据
- ImageView中的图片怎么在SQLite数据库中存取.txt
- 我的 Android 之旅(十九)---数据存储--向SD卡中以实体类的方式存取数据
- 动态规划入门
- 风机桨叶故障诊断(七) 滑动窗与非极大值抑制NMS
- poj1260
- 【Wordpress】消除Wordpress3.1.x在php5.4.x上的一堆警告
- 第五章:面向对象(一)
- 怎么向数据库中存取data的数据
- 短信基础
- 第六章:面向对象(二)
- iOS - 响应者链触摸事件
- property animation属性动画设计
- 天正电气6.0和autocad2005和excel2003的互相导入
- 自定义View
- 第七章:面向对象(三)
- 编程之美之求二叉树中节点的最大距离(递归和非递归法)