Ios 将UIImage作为二进制文件保存到SQLite并使用imageWithData检索它

Ios 将UIImage作为二进制文件保存到SQLite并使用imageWithData检索它,ios,sqlite,uiimage,nsdata,Ios,Sqlite,Uiimage,Nsdata,我正在将一些图像保存到应用程序中的SQLite数据库中。我用一个图形化的SQLite客户端访问了数据库,它正确地保存了我图像的二进制文件。问题在于从数据库中检索它。 这就是它看起来的样子: 拯救 取回 -(Object *)retrieveObjectWithID:(NSString*)id { NSString* sqliteQuery = [NSString stringWithFormat:@"SELECT OBJECTIMAGE,OBJECTNAME FROM OBJECTS WHER

我正在将一些图像保存到应用程序中的SQLite数据库中。我用一个图形化的SQLite客户端访问了数据库,它正确地保存了我图像的二进制文件。问题在于从数据库中检索它。 这就是它看起来的样子:

拯救

取回

-(Object *)retrieveObjectWithID:(NSString*)id
{

NSString* sqliteQuery = [NSString stringWithFormat:@"SELECT OBJECTIMAGE,OBJECTNAME FROM OBJECTS WHERE OBJECTID = '%@'", id];    
NSLog(@"sqlitequery: %@",sqliteQuery);
sqlite3_stmt* statement;

Object *object = [[Object alloc]init];

object.id = id;

if( sqlite3_prepare_v2(databaseHandle, [sqliteQuery UTF8String], -1, &statement, NULL) == SQLITE_OK )

{

    if( sqlite3_step(statement) == SQLITE_ROW )

    {

        NSUInteger length = sqlite3_column_bytes(statement, 1);

        object.imgData  = [NSData dataWithBytes:sqlite3_column_blob(statement, 1) length:length];
        object.name = [NSString stringWithFormat:@"%s",sqlite3_column_text(statement, 2)];

    }

}


// Finalize and close database.

sqlite3_finalize(statement);


return object;
}
这就是目标

@interface Object : NSObject


@property(nonatomic,strong) NSString *id;
@property(nonatomic,strong) NSString *name;
@property(nonatomic,strong) NSData *imgData;

@end

请检查以下代码

NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(statement, 0) length:sqlite3_column_bytes(statement, 0)];

object.imgData = data;
而不是

NSUInteger length = sqlite3_column_bytes(statement, 1);

        object.imgData  = [NSData dataWithBytes:sqlite3_column_blob(statement, 1) length:length];

数据检索有什么问题?它检索到一个很小的十六进制,不允许我从数据库表上的“OBJECTIMAGE”字段类型构建uiimage?是varchar吗?这是创建表的语句:
CREATE table IF NOT EXISTS STORES(ID INTEGER主键自动递增,STOREID TEXT,STOREIMG BLOB,STORENAME TEXT)
它给了我同样的东西。它不是从
UIImagePNGRepresentation
返回一个巨大的十六进制数,而是返回这个
@lucaspreira:我发现了问题,您正在将图像名称分配给图像数据。我已经更新了上面的代码。Yur数据位于OBJECTIMAGE行中,因此您需要在sqlite3\u column\u blob(语句,0)中使用0而不是1
NSUInteger length = sqlite3_column_bytes(statement, 1);

        object.imgData  = [NSData dataWithBytes:sqlite3_column_blob(statement, 1) length:length];