2016-08-31 3 views
0

У меня есть этот метод в моем классе, вставки данных в таблицу,sqlite3_step (заявление) дает ложный EVERYTIME

- (BOOL) registerData:(NSString*)name 
       email:(NSString *)email mobno:(NSString*)mobno username:(NSString *)username password:(NSString *)password imageUrl:(NSString*)imageUrl; 
{ 
    const char *dbpath = [databasePath UTF8String]; 
    if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
    { 
     NSString *insertSQL = [NSString stringWithFormat:@"insert into loginDetail (name, email, mobno, username, password, imageUrl) values (\"%@\",\"%@\", \"%@\", \"%@\", \"%@\", \"%@\")", name,email,mobno,username,password,imageUrl]; 
     NSLog(@"image path %@", imageUrl); 
     const char *insert_stmt = [insertSQL UTF8String]; 
     if (sqlite3_prepare_v2(database, insert_stmt, -1, &statement, NULL) == SQLITE_OK) { 

     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      NSLog(@"SQLITE DONE %d", sqlite3_step(statement)); 
      return YES; 
     } 
     else { 
      NSLog(@"SQLITE DONE %d", sqlite3_step(statement)); 
      return NO; 
     } 
     sqlite3_reset(statement); 
    } 
    } 
    sqlite3_close(database); 
    return NO; 
} 

sqlite3_step (заявление) возвращают ложные каждый раз.

Я называю этот метод из,

- (IBAction)registerBtn:(UIButton *)sender { 
    NSLog(@"fileName path = %@", fileName); 
    wasClicked = YES; 
    BOOL success = NO; 
    if(wasClicked) 
    { 
     if((_errorMessageLabel.hidden)) { 
      NSLog(@"register button clicked"); 

      NSString *alertString = @"Data Insertion failed"; 
      if (name.text.length>0 && email.text.length>0 && 
       mobileNo.text.length>0 && Useraname.text.length>0 && password.text.length>0 && fileName.length>0) 
      { 
       success = [[DatabaseConnection getSharedInstance]registerData: 
          name.text email:email.text mobno: 
          mobileNo.text username:Useraname.text password:password.text imageUrl:fileName]; 
       NSLog(success? @"yes" : @"no"); 
       if(success == YES) 
       { 
        _successLbl.text = @"Data Registered Successfully"; 

        name.text = @""; 
        email.text [email protected]""; 
        mobileNo.text = @""; 
        Useraname.text [email protected]""; 
        password.text [email protected]""; 
       } 
      } 
      else{ 
       alertString = @"Enter all fields"; 
      } 
      if (success == NO) { 

       alertString = @"Data not registered, Duplicate Username Found!"; 
       UIAlertView *alert = [[UIAlertView alloc]initWithTitle: 
             alertString message:nil 
                   delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
       [alert show]; 
      } 

     } 
    } 


} 

Но я не подвожу успеха не каждый раз, когда я выполнить код.

Не знаю почему, но это происходит после того, как я добавил новое поле в базу данных, которое является imageURL.

Моя создать БД запрос,

const char *sql_stmt = "create table if not exists loginDetail (name text, email text, mobno text, username text primary key, password text, imageUrl text)"; 

пожалуйста, предложить изменения.

+2

Возможный дубликат [sqlite3 \ _step (statement) == SQLITE \ _DONE всегда неверен] (http://stackoverflow.com/questions/16891190/sqlite3-stepstatement-sqlite-done-is-always-false) –

+0

вставьте свой запрос insertSQL здесь – Sujit

+0

он в коде. @Sujit – KAR

ответ

0

Мне просто нужно добавить ALTER стол и добавить в него новый столбец.

Для этого я использовал,

const char *sql_stmt = "create table if not exists loginDetail (name text, email text, mobno text, username text primary key, password text)"; 

      const char *newLoginDetail = "ALTER TABLE loginDetail RENAME TO newLoginDetail"; 
      const char *altr_stmt = "ALTER TABLE newLoginDetail ADD COLUMN imageUrl text"; 
      const char *sql_stmt1 = "create table if not exists newLoginDetail (name text, email text, mobno text, username text primary key, password text, imageUrl text)"; 

Теперь новая колонка создана и работает отлично.

Смежные вопросы