хранить и извлекать изображение в базу данных sqlite для iphone

Я пытаюсь сохранить и получить изображение и текст из базы данных sqlite. Мой код saveDatabase работает правильно .. но я не хочу, сохранен ли он в моей базе данных. Вот мой код для этого.

sqlite3 *database; dbName=@"dataTable.sqlite"; NSArray *documentpath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentdir=[documentpath objectAtIndex:0]; dbPath=[documentdir stringByAppendingPathComponent:dbName]; sqlite3_stmt *compiledStmt; if(sqlite3_open([dbPath UTF8String], &database)==SQLITE_OK){ NSLog(@"Name:%@,Company:%@,URL:%@",model.personName,model.companyName,model.imgurl); // NSString *sqlStatement=[NSString stringWithFormat:@"insert or ignore into Persons(PersonName,CompanyName,ImgUrl)values(\"%@\",\"%@\",\"%@\")",model.personName,model.companyName,model.imgurl]; // const char *insertSQL=[sqlStatement UTF8String]; const char *insertSQL="insert or ignore into Persons(PersonName,CompanyName,ImgUrl,UserImage)values(?,?,?,?)"; sqlite3_bind_text(compiledStmt,1,[model.personName UTF8String],-1,SQLITE_TRANSIENT); sqlite3_bind_text(compiledStmt,2,[model.companyName UTF8String],-1,SQLITE_TRANSIENT); sqlite3_bind_text(compiledStmt,3,[model.imgurl UTF8String],-1,SQLITE_TRANSIENT); NSData *imageData=UIImagePNGRepresentation(imageView.image); sqlite3_bind_blob(compiledStmt, 4, [imageData bytes], [imageData length], NULL); if(sqlite3_prepare_v2(database,insertSQL, -1, &compiledStmt, NULL)==SQLITE_OK){ sqlite3_step(compiledStmt); // char *errMsg; // sqlite3_exec(database, insertSQL, NULL,compiledStmt,&errMsg); NSLog(@"Add to Favourites"); 

Когда я пытаюсь получить мою базу данных, я получаю ошибку ..

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[NSString stringWithUTF8String:]: NULL cString' 

Это мой код для чтения базы данных.

  sqlite3 *database; favArray=[[NSMutableArray alloc]init]; if(sqlite3_open([dbPath UTF8String],&database)==SQLITE_OK) { const char *sqlStatement="select * from Persons"; sqlite3_stmt *compiledStatement; if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL)==SQLITE_OK) { while (sqlite3_step(compiledStatement)==SQLITE_ROW) { int personId = sqlite3_column_int(compiledStatement,0); NSString *personName=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 1)]; NSString *companyName=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; NSString *imgurl=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)]; int length = sqlite3_column_bytes(compiledStatement, 4); // NSData *data = [NSData dataWithBytes:sqlite3_column_blob(compiledStatement, 4) length:length]; NSString *imageString=[NSString stringWithCharacters:sqlite3_column_blob(compiledStatement, 4) length:length]; UIImage *personImage=[UIImage imageNamed:imageString]; Favourites *favourites=[[Favourites alloc]initWithPersonId:personId personName:personName companyName:companyName imgurl:imgurl personImage:personImage]; [favArray addObject:favourites]; } }sqlite3_finalize(compiledStatement); } sqlite3_close(database); 

Я думаю, что я делаю что-то неправильно в чтении базы данных по неправильному пути доступа к данным. Кто-нибудь поможет мне получить изображение из базы данных …

3 Solutions collect form web for “хранить и извлекать изображение в базу данных sqlite для iphone”

Наконец, я нашел, в каком месте у меня проблема … Сначала я проверил, что данные хранятся в моей базе данных simlator .. они не хранятся. Так что я обнаружил, что в моем вставном коде была проблема … это то, что я связываю данные перед подготовкой заявления … Ответ, который я узнал, – это ..

 if(sqlite3_prepare_v2(database,insertSQL, -1, &compiledStmt, NULL)==SQLITE_OK){ sqlite3_bind_text(compiledStmt,1,[model.personName UTF8String],-1,SQLITE_TRANSIENT); sqlite3_bind_text(compiledStmt,2,[model.companyName UTF8String],-1,SQLITE_TRANSIENT); sqlite3_bind_text(compiledStmt,3,[model.imgurl UTF8String],-1,SQLITE_TRANSIENT); NSData *imageData=UIImagePNGRepresentation(imageView.image); sqlite3_bind_blob(compiledStmt, 4, [imageData bytes], [imageData length], NULL); sqlite3_step(compiledStmt); // char *errMsg; // sqlite3_exec(database, insertSQL, NULL,compiledStmt,&errMsg); NSLog(@"Add to Favourites"); } 

Используйте этот метод для создания UIImage из NSData:

  • (UIImage *) imageWithData: (NSData *) данные
 -(void)btnImage { imgButton=[UIButton buttonWithType:UIButtonTypeCustom]; [imgButton setImage:[UIImage imageNamed:@"user_default.png"] forState:UIControlStateNormal]; [imgButton addTarget:self action:@selector(changeImage:) forControlEvents:UIControlEventTouchUpInside]; imgButton.frame=CGRectMake(100, 50, 120, 120); imgButton.layer.cornerRadius=imgButton.frame.size.width/2; imgButton.layer.masksToBounds=YES; [self.view addSubview:imgButton]; } -(void)dataBase { NSArray *arr=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path=[arr objectAtIndex:0]; simulaterPath=[path stringByAppendingPathComponent:@"imgDataBase.sqlite"]; NSFileManager *filemanager=[NSFileManager defaultManager]; if (![filemanager fileExistsAtPath:simulaterPath]) { NSLog(@"hi"); NSString *xcode=[[NSBundle mainBundle]pathForResource:@"imgDataBase" ofType:@"sqlite"]; BOOL copy=[filemanager copyItemAtPath:xcode toPath:simulaterPath error:nil]; if (copy) { NSLog(@"copy finish"); NSLog(@"Simulater:%@",simulaterPath); } } } imgPicker=[[UIImagePickerController alloc]init]; imgPicker.allowsEditing=YES; imgPicker.delegate=self; imgPicker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary; [self presentViewController:imgPicker animated:YES completion:nil]; img=info[UIImagePickerControllerEditedImage]; path=[info objectForKey:UIImagePickerControllerReferenceURL]; [imgButton setImage:img forState:UIControlStateNormal]; urlImage=[NSString stringWithFormat:@"%@",path]; NSData *data=UIImageJPEGRepresentation(img, 0.8); [self SaveImagesToSql:data :urlImage]; [picker dismissViewControllerAnimated:YES completion:nil]; ret=[self LoadImagesFromSql:urlImage]; i=[[UIImage alloc]initWithData:ret]; [_myImageView setImage:i]; NSLog( @"\n*****Save image to SQLite*****\n" ); if (sqlite3_open([simulaterPath UTF8String], &imageDB)==SQLITE_OK) { const char* sqliteQuery = "INSERT INTO imgTable (name, imageName) VALUES (?, ?)"; sqlite3_stmt* statement; if( sqlite3_prepare_v2(imageDB, sqliteQuery, -1, &statement, NULL) == SQLITE_OK ) { sqlite3_bind_text(statement, 1, [mainUrl UTF8String], -1, SQLITE_TRANSIENT); sqlite3_bind_blob(statement, 2, [imgData bytes], [imgData length], SQLITE_TRANSIENT); sqlite3_step(statement); } else NSLog( @"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(imageDB) ); // Finalize and close database. sqlite3_finalize(statement); } NSData* data = nil; // NSString* sqliteQuery = [NSString stringWithFormat:@"SELECT imageName FROM imgTable WHERE name = '%@'", imageLink]; NSString *sqliteQuery = [NSString stringWithFormat:@"SELECT imageName FROM imgTable"]; NSString *count=[NSString stringWithFormat:@"SELECT count(imageName) FROM imgTable"]; sqlite3_stmt* statement; if (sqlite3_open([simulaterPath UTF8String], &imageDB)==SQLITE_OK) { if (sqlite3_prepare_v2(imageDB, [count UTF8String], -1, &statement, NULL)==SQLITE_OK) { if( sqlite3_step(statement) == SQLITE_ROW ) { int no=sqlite3_column_int(statement, 0); NSLog(@"count=%d",no); } } if( sqlite3_prepare_v2(imageDB, [sqliteQuery UTF8String], -1, &statement, NULL) == SQLITE_OK ) { if( sqlite3_step(statement) == SQLITE_ROW ) { int length = sqlite3_column_bytes(statement, 0); data = [NSData dataWithBytes:sqlite3_column_blob(statement, 0) length:length]; NSLog(@"%d",i); } } // Finalize and close database. sqlite3_finalize(statement); } return data; 
  • Как обновить данные на сервере db через json api?
  • В чем разница между libsqlite3.dylib и libsqlite3.0.dylib?
  • Открытие и создание базы данных SQLite в Objective C
  • Как открыть базу данных sqlite, когда приложение работает в фоновом режиме в ios
  • Обновление sqlite3 не работает в ios
  • Как запросить внешнюю базу данных SQL - приложение для iPhone
  • добавить файл Seperate .sqlite в проект ios
  • Как добавить и выполнить .sql-файлы в моем проекте iOS?
  • Ошибка ввода IOS в sqlite
  • Невозможно подключить базу данных SQLite в iOS
  • Ошибка SQLite3 - iOS
  • Interesting Posts

    Могу ли я отправить текущее местоположение пользователя на сервер, когда приложение находится в фоновом режиме?

    Admob iOS: получение com.google.DummyAdapter на реальном устройстве, работа с симулятором

    Как конвертировать UIImage в base64 и POST в URL

    Объект освобождается сразу после его инициализации

    Координаты CLLocationManager

    Как вы можете получить полезную нагрузку push-уведомления, если приложение уже работает в фоновом режиме, когда пользователь удаляет уведомление?

    Таймер в другом потоке в Objective – C

    Текст IOS8 в TextField отскакивает от фокуса

    AVPlayer перестает играть и не возобновляется снова

    Замена для метода indexOf (_ :) для массива в Swift 3

    Поиск адреса с помощью SWIFT

    Полнофункциональный менеджер загрузки файлов для iOS

    добавьте текущий день с одним днем ​​после и за один день до даты выбора участника-C

    динамически задавать название контроллера навигации

    Утечка памяти iOS 8 при создании множества NSURLConnections

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.