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. Или это может быть случай, когда одно и то же соединение с базой данных используется двумя или более потоками в один и тот же момент времени.

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

  • Не удается найти модель сопоставления для миграции - миграция основных данных UIManagedDocument
  • Что такое autoLayout в xcode 4.5?
  • Ошибка CopyPNGFile
  • MonoDevelop / XCode Build успешно. Сбой сборки. Неверные данные
  • Приложение iOS не будет компилироваться на устройстве, но отлично работает в симуляторе
  • Как использовать SDK Linea-Pro для IOS?
  • XCode 4.5 / iOS6: проблема ориентации с моим iPad-приложением в ландшафтном режиме
  • «Автоматическая компоновка по-прежнему требуется после выполнения -layoutSubviews» с подклассом UITableViewCell
  • IBAction в Xcode 4.5
  • Ошибка генерации фреймворка Live555
  • AutoLayout, ограничения, iPhone 3,5 дюйма и 4 дюйма
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.