我手里正在开发的项目需要用到数据库对数据进行处理,但是在实现修改已存图片功能的时候发现UPDATE 操作之后再读取修改过的二进制数据时返回nil。
经过一段时间研究我发现FMDB中处理INSERT时会调用到下面的方法
- (void)bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt {
if ((!obj) || ((NSNull *)obj == [NSNull null])) {
sqlite3_bind_null(pStmt, idx);
}
// FIXME - someday check the return codes on these binds.
else if ([obj isKindOfClass:[NSData class]]) {
sqlite3_bind_blob(pStmt, idx, [obj bytes], (int)[obj length], SQLITE_STATIC);
} ......
通过这句标准sqlite语句 才能有效的将二进制信息保存到数据库
sqlite3_bind_blob(pStmt, idx, [obj bytes], (int)[obj length], SQLITE_STATIC);
但是我发现如果使用UPDATE语句并没有调用上面的方法,所以二进制数据更新会出错,由于本人对数据库并没有过多研究并且项目时间较紧,所以最后选择了删除再插入新数据的笨方法来解决问题。
网友评论