xcode 如何从Sqlite数据库中保存和检索图像?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6509987/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to Save And Retrieve Image From Sqlite Database?
提问by Anand
I am convert the image into data and saving the Image in Database Like the following NSData *imageData = UIImagePNGRepresentation(imgView.image);
我将图像转换为数据并将图像保存在数据库中,如下所示 NSData *imageData = UIImagePNGRepresentation(imgView.image);
[dataArray addObject:imageData];
And retrieve the data into image as Follows
并将数据检索到图像中,如下所示
NSData *imdata = [[tableArray objectAtIndex:indexPath.row] objectForKey:@"Image"];
SQlite Code for saving:
用于保存的 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 Code For getting:
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;
}
}
[imView setImage:[UIImage imageWithData:imdata]];
[cell addSubview:imView];
Id And Name Are retrieved But the image didnt displayed. the app terminates without any Error message.. Please let me know the Solution for this
已检索 ID 和名称,但图像未显示。应用程序终止,没有任何错误消息..请让我知道解决方案
回答by Eshwar Chaitanya
I know my answer is a too late,but it might be useful for some one who view this question,usually while stroring images in sqlite database table using BLOB,that will have an affect on the performance of database and will slow down the loading of data,when records start to increase in numbers.Without using BLOB,you can save and retrieve images from database,here is the post/linkthat will help you out to carry on and achieve the task
我知道我的答案为时已晚,但它可能对查看此问题的人有用,通常是在使用 BLOB 在 sqlite 数据库表中存储图像时,这会影响数据库的性能并减慢加载速度数据,当记录开始增加数量时。不使用 BLOB,您可以从数据库中保存和检索图像,这里是帖子/链接,将帮助您继续并完成任务
Hope it helps some one who are struck with images storage in database :)
希望它可以帮助那些对数据库中的图像存储感到震惊的人:)
回答by hundreth
I don't see any sqlite database code there. If you simply wanted to pull the image out of your dataArray, you want:
我在那里没有看到任何 sqlite 数据库代码。如果您只是想从 dataArray 中提取图像,您需要:
NSData *imdata = [dataArray objectAtIndex:indexPath.row];