2016-08-31 2 views
0

ich diese Methode in meiner Klasse, die Daten in der Tabelle einfügen,sqlite3_step (Erklärung) gibt falsch jedes Mal

- (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 (Erklärung) falsch jedes Mal zurück.

ich von dieser Methode nenne,

- (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]; 
      } 

     } 
    } 


} 

Aber ich bin immer Erfolg NO jedes Mal, wenn ich den Code ausführen.

Ich weiß nicht warum, aber es passiert, nachdem ich ein neues Feld in der Datenbank hinzugefügt habe, die imageURL ist.

Mein db-Abfrage ist,

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

bitte vorschlagen Änderungen erstellen.

+2

Mögliches Duplikat von [sqlite3 \ _step (Anweisung) == SQLITE \ _DONE ist immer falsch] (http://stackoverflow.com/questions/16891190/sqlite3-stepstatement-sqlite-done-is-always-false) –

+0

Fügen Sie hier Ihre insertSQL-Abfrage – Sujit

+0

es ist in Code. @Sujit – KAR

Antwort

0

Ich muss nur die Tabelle ändern und neue Spalte hinzufügen.

Dafür habe ich verwendet,

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)"; 

Jetzt neue Spalte erstellt und es funktioniert gut.

Verwandte Themen