Iphone 如何从Sqlite数据库中保存和检索图像?
我正在将图像转换为数据,并将图像保存在数据库中,如下所示 NSData*imageData=UIImagePNGRepresentation(imgView.image) 并将数据检索到图像中,如下所示Iphone 如何从Sqlite数据库中保存和检索图像?,iphone,database,xcode,uiimage,Iphone,Database,Xcode,Uiimage,我正在将图像转换为数据,并将图像保存在数据库中,如下所示 NSData*imageData=UIImagePNGRepresentation(imgView.image) 并将数据检索到图像中,如下所示 NSData *imdata = [[tableArray objectAtIndex:indexPath.row] objectForKey:@"Image"]; 用于保存的SQlite代码: if (sqlite3_open([databasePath UTF8Str
NSData *imdata = [[tableArray objectAtIndex:indexPath.row] objectForKey:@"Image"];
用于保存的SQlite代码:
if (sqlite3_open([databasePath UTF8String], &database)== SQLITE_OK)
{
NSString *statement;
sqlite3_stmt *compiledstatement;
int Id;
NSString *Name;
NSData *imgData;
Id = [[recordArray objectAtIndex:0] intValue];
Name = [recordArray objectAtIndex:1];
imgData = [recordArray objectAtIndex:2];
statement = [[NSString alloc]initWithFormat:@"insert into ImageTable values ('%d','%@','%@')",Id,Name,imgData] ;
const char *sqlstatement = [statement UTF8String];
if (sqlite3_prepare_v2(database, sqlstatement, -1, &compiledstatement, NULL)== SQLITE_OK) {
if (SQLITE_DONE!=sqlite3_step(compiledstatement) ) {
NSAssert1(0,@"Error when inserting %s",sqlite3_errmsg(database));
}
else {
NSLog(@"Data inserted Successfully");
}
//[recordDict release];
}
else {
NSLog(@"Failed with error");
NSAssert1(0,@"Error when creation %s",sqlite3_errmsg(database));
}
}
//sqlite3_finalize(compiledstatement);
获取以下信息的Sqlite代码:
- (NSMutableArray *) getRecord
{
[self checkAndCreateDatabase];
sqlArray=[[NSMutableArray alloc]init ];
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
const char *sql = "select * from ImageTable";
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
{
while(sqlite3_step(selectstmt) == SQLITE_ROW)
{
//[sqlDict retain];
sqlDict =[[NSMutableDictionary alloc]init ];
NSString *Id = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
//[barcodeArray addObject:prdbcode];
[sqlDict setObject:Id forKey:@"Id"];
//[prdbcode release];
NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
//[nameArray addObject:prdname];
[sqlDict setObject:name forKey:@"Name"];
//[prdname release];
NSData *image = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
//NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, 1) length:sqlite3_column_bytes(selectstmt, 1)];
//[descArray addObject:prdDesc];
[sqlDict setObject:image forKey:@"Image"];
// [prdDesc release];
[sqlArray addObject:sqlDict];
}
sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
//
}
return sqlArray;
}
检索到Id和名称,但未显示图像。
应用程序在没有任何错误消息的情况下终止。。
请告诉我此问题的解决方案,我在那里没有看到任何sqlite数据库代码。如果您只是想从dataArray中提取映像,则需要:
NSData *imdata = [dataArray objectAtIndex:indexPath.row];
我知道我的答案已经太迟了,但它可能对一些查看此问题的人有用,通常在使用BLOB对sqlite数据库表中的图像进行扫描时,这会影响数据库的性能,并会在记录开始增加时减慢数据的加载。如果不使用BLOB,您可以从数据库中保存和检索图像,以下是帮助您执行和完成任务的方法
希望它能帮助那些对数据库中的图像存储感到震惊的人:)这与SQLite有什么关系?类似的问题:希望你的问题得到解决。
[imView setImage:[UIImage imageWithData:imdata]];
[cell addSubview:imView];
NSData *imdata = [dataArray objectAtIndex:indexPath.row];