хранить и извлекать изображение в базу данных 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; 
  • sqlite 3 "Ошибка SQL" из памяти "(7)" objc
  • Как запросить внешнюю базу данных SQL - приложение для iPhone
  • Как обращаться с несколькими потоками для доступа к sqlite3 с отсутствием dblocked error
  • Параметры guarded_open_np
  • Sqlite в проблемах памяти iOS
  • Преобразование NSString в нижние регистры
  • как добавить столбец в таблице sqlite в SWIFT
  • Какая версия sqlite предоставляет iOS?
  • Шаги по созданию реляционной базы данных (sqlite) в быстрой
  • Восстановить имена таблиц из базы данных sqlite в объекте-c
  • Доля Sqlite с обменом файлами iTune в приложении iOS.
  • Interesting Posts

    React Native Fetch Blob – undefined не является объектом (оценка «RNFetchBlob.DocumentDir»)

    UIImage выпущен, но CGImage не выпущен

    Найти значения в NSArray с NSArray с помощью NSString с использованием NSPredicate iOS

    SEGV_ACCERR вызывает removeObserver: self] в dealloc

    Выпускает ли контроллер представления все его свойства?

    Устранение неполадок оптимизации LLVM с помощью прагмы

    Невозможно скомпилировать plcrashreporter в Xcode 4

    Почему я не могу изменить размер фрейма представления в Swift?

    удалить год для формата даты в отношении локали пользователей

    UIViews со встроенными представлениями прокрутки (UITableView, UICollectionView) неоднозначны с Auto Layout в Xcode 6 b2. Ошибка или причина?

    неявное преобразование «unsigned long» UIUserNotificationSettings * 'запрещено с помощью дуги

    Подключение к iTunes для использования Push-уведомлений

    Cocos2d v3 Применить шейдер на дочерних элементах

    Невозможно преобразовать значение типа String! к ожидаемой ошибке типа аргумента

    UISearchDisplayController разрыв между наложением и баром

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