我手里正在開發的項目需要用到數據庫對數據進行處理,但是在實現修改已存圖片功能的時候發現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語句并沒有調用上面的方法,所以二進制數據更新會出錯,由于本人對數據庫并沒有過多研究并且項目時間較緊,所以最后選擇了刪除再插入新數據的笨方法來解決問題。