如何在iphone中的sqlite数据库中存储图像?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"image.sqlite"]; if (sqlite3_open_v2([path UTF8String], &database, SQLITE_OPEN_READWRITE, NULL) == SQLITE_OK) { if(selectStmt == nil) { const char *sql = "insert into imagetb(imagename,image) Values(?,?)"; if(sqlite3_prepare_v2(database, sql, -1, &selectStmt, NULL) != SQLITE_OK) // NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(database)); NSLog(@"%s",sqlite3_errmsg(database)); } sqlite3_bind_text(selectStmt, 1, [@"test.png" UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_blob(selectStmt, 2, [data1 bytes], [data1 length], SQLITE_TRANSIENT); if(SQLITE_DONE != sqlite3_step(selectStmt)) NSLog(@"get: %s",sqlite3_errmsg(database)); else NSLog(@"scan data added"); } //showimage NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) { const char *sql = "select * from imagetb";// LIMIT 0,100 ";// where status = 1 "; sqlite3_stmt *selectstatment; if (sqlite3_prepare_v2(database, sql, -1, &selectstatment, NULL) == SQLITE_OK) { while (sqlite3_step(selectstatment) == SQLITE_ROW) { NSString *getorgstrid = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstatment, 0)]; NSLog(@"id->%@",getorgstrid); [getid addObject:getorgstrid]; NSString *getorgstrname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstatment, 1)]; NSLog(@"name->%@",getorgstrname); [getname addObject:getorgstrname]; NSData *getorgstrimage = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstatment,2)length:sqlite3_column_bytes(selectstatment, 2)]; [getimage addObject:getorgstrimage]; } } sqlite3_finalize(selectstatment); } //[tblorgland reloadData]; UIImage *image1 = [UIImage imageWithData:[getimage lastObject]]; NSLog(@"image%@",image1); [getImageview setImage:image1]; [pool release]; ============================================================================== - (NSString *) getDBPath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); NSString *documentsDir = [paths objectAtIndex:0]; return [documentsDir stringByAppendingPathComponent:@"image.sqlite"]; } - (void)viewDidLoad { [super viewDidLoad]; getid=[[NSMutableArray alloc]init]; getname=[[NSMutableArray alloc]init]; getimage=[[NSMutableArray alloc]init]; [self downloadimage]; [self makeDBCopyAsNeeded]; } -(void)downloadimage { NSLog(@"Downloading..."); UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://0.tqn.com/d/graphicssoft/1/7/g/A/5/psptubezdotcom_003.png"]]]; NSLog(@"%f,%f",image.size.width,image.size.height); NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSLog(@"%@",docDir); NSLog(@"saving png"); pngFilePath = [NSString stringWithFormat:@"%@/test.png",docDir]; data1 = [NSData dataWithData:UIImagePNGRepresentation(image)]; img=[[UIImage alloc]initWithData:data1]; [data1 writeToFile:pngFilePath atomically:YES]; NSLog(@"saving jpeg"); NSString *jpegFilePath = [NSString stringWithFormat:@"%@/test.jpeg",docDir]; NSLog(@"jpegFilePath:%@",jpegFilePath); data2 = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)]; [data2 writeToFile:jpegFilePath atomically:YES]; NSLog(@"saving image done"); [image release]; } - (void) makeDBCopyAsNeeded { BOOL success; NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"image.sqlite"]; success = [fileManager fileExistsAtPath:writableDBPath]; NSString *dbPath = [self getDBPath]; NSLog(@"%@",dbPath); if (success) { NSLog(@"Database Success Created"); return; } NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"image.sqlite"]; success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; if (!success) { NSLog(@"Database:->%s",sqlite3_errmsg(database)); } } 

不build议将图像数据存储在sqlite中。 但是如果你想存储图像数据,然后使用这个链接

在iphone中保存图像数据到sqlite数据库

希望这会帮助你..

你最好使用caching来存储你的图像,并使用数据库来存储他们的名字或一些唯一的ID

只需在下面的代码中写入下面的代码 – (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)图像editingInfo:(NSDictionary *)editingInfo:如果您从图库或相机中获取图像,否则跳过if(imageData!= nil ),只是使用下面的代码保存图像在sqlite中

 NSData * imageData = UIImageJPEGRepresentation(image, 0.8); NSLog(@"Image data length== %d",imageData.length); if (imageData != nil) { UIImage *resizedImg = [self scaleImage:[UIImage imageWithData:imageData] toSize:CGSizeMake(150.0f,150.0f)]; NSData * imageData = UIImageJPEGRepresentation(resizedImg, 0.2); NSLog(@"*** Image data length after compression== %d",imageData.length); NSString *nameofimg=[NSString stringWithFormat:@"%@",resizedImg]; NSString *substring=[nameofimg substringFromIndex:12]; NSString *new=[substring substringToIndex:7];// Get image name NSArray *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentdirectory=[path objectAtIndex:0]; NSString *newFilePath = [NSString stringWithFormat:[documentdirectory stringByAppendingPathComponent: @"/%@.png"],new]; [imageData writeToFile:newFilePath atomically:YES]; imgpath=[[NSString alloc]initWithString:newFilePath]; NSLog(@"doc img in img method === %@",imgpath); } databasepath=[app getDBPath]; // i have this method in delegate if (sqlite3_open([databasepath UTF8String], &dbAssessor) == SQLITE_OK) { NSString *selectSql = [NSString stringWithFormat:@"insert into imagetb(imagename,image) VALUES(\"%@\",\"%@\") ;",yourImgName,imgpath]; NSLog(@"Query : %@",selectSql); const char *sqlStatement = [selectSql UTF8String]; sqlite3_stmt *query_stmt; sqlite3_prepare(dbAssessor, sqlStatement, -1, &query_stmt, NULL); if(sqlite3_step(query_stmt)== SQLITE_DONE) { NSLog(@"home image updated. :)"); app.houseImage=imgpath; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Sorry" message:@"Failed To Save Home Image." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release]; } sqlite3_finalize(query_stmt); } sqlite3_close(dbAssessor);