sqlite3_step (оператор) == SQLITE_DONE всегда false

Я пытаюсь зарегистрировать пользователя в своем приложении.
У меня есть контроллер представления с 3 textfields (username, password and confirmpassword) и кнопка submit .

Вызывается следующий метод при нажатии кнопки отправки:

 -(IBAction)addUser { NSString *tempUser,*tempPass, *tempConfPass; tempUser = [[NSString alloc]init]; tempPass = [[NSString alloc]init]; tempConfPass = [[NSString alloc]init]; tempUser = [NSString stringWithFormat:@"%@",_mUserName.text]; tempPass = [NSString stringWithFormat:@"%@",_mPassword.text]; tempConfPass = [NSString stringWithFormat:@"%@",_mConfPassword.text]; signupUser = [[UseDb alloc]init]; flagUser = [signupUser addNewUser:_mUserName.text:_mPassword.text:_mConfPassword.text]; if(flagUser) { myAlertViewUser = [[UIAlertView alloc] initWithTitle:@"Error" message:@"User Added" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [myAlertViewUser show]; } else { _mStatus.text = @"failed to add user"; myAlertViewUser = [[UIAlertView alloc] initWithTitle:@"Error" message:@"passwords don't match" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [myAlertViewUser show]; } } 

и этот метод вызывается методом addUser :

 -(BOOL)addNewUser:(NSString *)newUser :(NSString *)newPassword :(NSString *)confirmPass { NSLog(@"%@....%@...%@",newUser, newPassword, confirmPass); sqlite3_stmt *statement; const char *dbpath = [_mDatabasePathDb UTF8String]; if (sqlite3_open(dbpath, &_mDb) == SQLITE_OK && [newPassword isEqualToString:confirmPass] && ![newUser isEqualToString:@""] && ![newPassword isEqualToString:@""]) { self.userName = [NSString stringWithFormat:@"%@",newUser]; self.password = [NSString stringWithFormat:@"%@",newPassword]; NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO USERDETAIL VALUES (\"%@\",\"%@\",\"%@\", \"%@\",\"%@\", \"%@\",\"%@\", \"%@\",\"%@\", \"%@\",\"%@\")",self.userName,self.password,@"",@"",@"",@"",@"",@"",@"",@"",@"" ]; NSLog(@"%@",insertSQL); const char *insert_stmt = [insertSQL UTF8String]; sqlite3_prepare_v2(_mDb, insert_stmt, -1, &statement, NULL); if (sqlite3_step(statement) == SQLITE_DONE) { return YES; /* mUserName.text = @""; mPassword.text = @""; mConfPassword.text = @""; */ } else { NSLog(@"failed to add user"); } sqlite3_finalize(statement); sqlite3_close(_mDb); } } 

В методе addNewUser if (sqlite3_step(statement) == SQLITE_DONE) всегда отображается как false , оператор имеет некоторое значение до

 sqlite3_prepare_v2(_mDb, insert_stmt, -1, &statement, NULL); 

но поворачивается на nil после выполнения вышеуказанного оператора. Я не понимаю, почему это происходит.
Пожалуйста помоги.

One Solution collect form web for “sqlite3_step (оператор) == SQLITE_DONE всегда false”

Это может быть проблемой с проверкой, которую вы выполняете, попробуйте SQLITE_OK. Он указан здесь в документах, так как в устаревшем интерфейсе (старый интерфейс) возвращаемое значение будет либо SQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR, либо SQLITE_MISUSE . С интерфейсом «v2» может быть возвращен любой из других кодов результатов или расширенных результирующих кодов.

 if (sqlite3_prepare_v2(_mDb, insert_stmt, -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_DONE) { return YES; } else { NSLog(@"failed to add user"); } sqlite3_finalize(statement); } 

вы также можете найти аналогичный вопрос и его ответ здесь

Вставьте фигурные скобки после инструкции подготовки и закройте ее после завершения утверждения. Поскольку вы получаете SQLITE_MISUSE, может случиться так, что эта процедура вызывается ненадлежащим образом. Возможно, он был вызван готовым заявлением, которое уже было завершено, или на том, которое ранее возвращало SQLITE_ERROR или SQLITE_DONE. Или это может быть случай, когда одно и то же соединение с базой данных используется двумя или более потоками в один и тот же момент времени.

Надеюсь это поможет 🙂

  • Ошибка CodeSign: требуется подписание кода для типа продукта «Приложение» в SDK «iOS 6.1»
  • Просмотр капель 20 пикселей при сборке против iOS 6 SDK в Xcode 4.5
  • Файл не найден с новым SDK GoogleMaps для iOS
  • Неопределенные символы для архитектуры i386: «_OBJC_CLASS _ $ _ ZipException», на которые ссылаются: ошибка
  • Является ли «Использовать базовую интернационализацию» в iOS 5?
  • Что означают эти предупреждения Dsymutil в XCode 4.5?
  • Файл facebookSDK 3.1.1 не найден
  • Как использовать SDK Linea-Pro для IOS?
  • Изменение размера вкладки камеры в iphone5
  • Ошибка MT0014: iOS 6 не поддерживает создание приложений, ориентированных на ARMv6
  • Xcode 4.5 - CopyPNGFile сохраняется. Нужны новые идеи
  • Interesting Posts

    Как изменить размер супервизора, чтобы соответствовать всем областям с автозапуском?

    viewDidUnload versus viewDidDisappear

    Xcode iOS testsuite NSLog отсутствует

    Отправка приложения iOS с использованием бета-версии xcode?

    UIPanGestureRecognizer не переключается в состояние «Конец» или «Отмена», если пользователь подталкивает x и y в отрицательном направлении

    Настроить метод запроса для ресурса Siesta

    Стандартный режим воспроизведения MPMoviePlayer для воспроизведения / паузы

    решение для XMPP в iOS swift 3.0

    Пожалуйста, помогите мне правильно применить данные о вращении устройства

    Настройка UIViewGroupOpacity на основе представления по представлению

    Почему приложение запускается каждый раз, когда я пытаюсь показать два контроллера дочерних представлений, которые являются GLKViewControllers?

    Оффлайн плейлисты, использующие CocoaLibSpotify

    viewDidLoad, вызываемый перед завершением подготовкиForSegue

    Прикосновение с добавлением

    UICollectionView овальная форменная пользовательская ячейка

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