图像不存储在sqlite中
我制作了一个将Image存储到数据库的演示。 目前我没有收到任何错误,但我的图像不存储在sqlite数据库中。 请看下面的代码告诉我我的错误在哪里。
DBManager类
sqlite3 *sqlite3DatabaseObject; sqlite3_stmt* sqlite3Statement; -(void)database { directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); documentsDirectory = [directoryPaths objectAtIndex:0]; NSString * databasePath = [[NSString alloc]initWithString:[documentsDirectory stringByAppendingPathComponent:@"informationdb.sql"]]; NSFileManager *fileManager = [NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:databasePath] == NO) { const char *dbPath = [databasePath UTF8String]; if (sqlite3_open(dbPath, &sqlite3DatabaseObject)== SQLITE_OK) { char * errorMessage; const char *sqlite3Query = "CREATE TABLE IF NOT EXISTS PICTURES (PHOTO BLOB)"; if (sqlite3_exec(sqlite3DatabaseObject, sqlite3Query, NULL, NULL, &errorMessage)!= SQLITE_OK) { NSLog(@"failed = %@",sqlite3DatabaseObject); } sqlite3_close(sqlite3DatabaseObject); }else{ NSLog(@"failed to create database"); } } } - (void) SaveImagesToSql: (NSData*) imgData { NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"informationdb" ofType:@"sql"]; const char* sqlite3Query = "INSERT INTO PICTURES (PHOTO) VALUES (?)"; int openDatabaseResult = sqlite3_open_v2([databasePath UTF8String], &sqlite3DatabaseObject, SQLITE_OPEN_READWRITE , NULL); if (openDatabaseResult == SQLITE_OK) { int sqlite3Prepare = sqlite3_prepare_v2(sqlite3DatabaseObject, sqlite3Query, -1, &sqlite3Statement, NULL); if( sqlite3Prepare == SQLITE_OK ) { sqlite3_bind_blob(sqlite3Statement, 1, [imgData bytes], [imgData length], SQLITE_TRANSIENT); sqlite3_step(sqlite3Statement); } else { NSLog(@"Error is: %s", sqlite3_errmsg(sqlite3DatabaseObject)); } sqlite3_finalize(sqlite3Statement); } else NSLog( @"Error is: %s", sqlite3_errmsg(sqlite3DatabaseObject) ); sqlite3_close(sqlite3DatabaseObject); }
ViewController类
- (void)viewDidLoad { [super viewDidLoad]; DBManager * dbmClass = [[DBManager alloc]init]; [dbmClass database]; imgView.userInteractionEnabled = YES; UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(uploadOrCapture)]; [singleTap setNumberOfTapsRequired:1]; [imgView addGestureRecognizer:singleTap]; } - (IBAction)btnSave:(id)sender { DBManager*dbmClass = [[DBManager alloc]init]; NSData *imageInData = UIImagePNGRepresentation(imgView.image); [dbmClass SaveImagesToSql:imageInData]; [self dismissViewControllerAnimated:YES completion:nil]; }
我无法找到问题所在。 它成功执行了所有代码,但是当我从设备下载数据库并进行检查时,没有存储图像数据。
提前致谢。
米希尔。
只是将此函数替换为我的代码,因为您的数据库路径错误
- (void) SaveImagesToSql: (NSData*) imgData { directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); documentsDirectory = [directoryPaths objectAtIndex:0]; NSString * databasePath = [[NSString alloc]initWithString:[documentsDirectory stringByAppendingPathComponent:@"informationdb.sql"]]; const char* sqlite3Query = "INSERT INTO PICTURES (PHOTO) VALUES (?)"; int openDatabaseResult = sqlite3_open_v2([databasePath UTF8String], &sqlite3DatabaseObject, SQLITE_OPEN_READWRITE , NULL); if (openDatabaseResult == SQLITE_OK) { int sqlite3Prepare = sqlite3_prepare_v2(sqlite3DatabaseObject, sqlite3Query, -1, &sqlite3Statement, NULL); if( sqlite3Prepare == SQLITE_OK ) { sqlite3_bind_blob(sqlite3Statement, 1, [imgData bytes], [imgData length], SQLITE_TRANSIENT); sqlite3_step(sqlite3Statement); } else { NSLog(@"Error is: %s", sqlite3_errmsg(sqlite3DatabaseObject)); } sqlite3_finalize(sqlite3Statement); } else NSLog( @"Error is: %s", sqlite3_errmsg(sqlite3DatabaseObject) ); sqlite3_close(sqlite3DatabaseObject); }
这是数据库截图
不要拖动到项目中的数据库。如果有任何问题,请告诉我
这里我如何根据您的使用进行修改。
NSData *imageData = UIImagePNGRepresentation(imgView.image); NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeStyle: NSDateFormatterShortStyle]; dateFormatter.dateFormat = @"ddMMyyyyhhmmss_SSS_a"; NSString *currentTime = [dateFormatter stringFromDate: [NSDate date]]; NSString *imageName=[NSString stringWithFormat:@"Image_%@",currentTime]; NSString *saveFilePath =[NSString stringWithFormat:@"%@.%@",imageName,@"png"]; //Store saveFilePath string to your database NSString *localFilePath1 = [documentsDirectory stringByAppendingPathComponent:saveFilePath]; [imageData writeToFile:localFilePath1 atomically:YES];
希望它能帮到你。