2016-08-31 63 views
0

我有我的类此方法将数据插入表中,sqlite3_step(陈述)提供虚假每次

- (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(声明)返回false每次。

我打电话此方法,

- (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的可能重复始终为false](http://stackoverflow.com/questions/16891190/sqlite3-stepstatement-sqlite-done-is-always-false) –

+0

在这里粘贴你的insertSQL查询 – Sujit

+0

它在代码中。 @Sujit – KAR

回答

0

我只需要改变表格并添加新的列。

为我用,

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

现在,新列上创建并能正常工作。