2015-03-26 3 views
0

У меня возникла проблема при вводе данных текстового поля в базу данных. он предупреждает меня fail to add in databasesqlite3 не удается добавить базу данных в iOS 6

, пожалуйста, помогите мне его мой новый проект.

NSString*docdir; 
    NSArray*dirpath; 

    dirpath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
    docdir=[dirpath objectAtIndex:0]; 
    _databasepath=[[NSString alloc]initWithString:[docdir stringByAppendingPathComponent:@"sehatis.db"]]; 
    NSFileManager*filemng=[NSFileManager defaultManager]; 
    if ([filemng fileExistsAtPath:_databasepath]==NO) { 
     const char*dbpath=[_databasepath UTF8String]; 
     if (sqlite3_open(dbpath, &_db)==SQLITE_OK) { 
      char *errormsg; 
      const char*sql_statement="CREATE TABLE IF NOT EXITS userss(ID INTEGER PRIMARY KEY AUTOINCREMENT,name text,age integer,gender text,female text,height integer,weight integer,blood text,email text,password text,conformpwd text)"; 
      if (sqlite3_exec(_db, sql_statement, NULL, NULL, &errormsg)!=SQLITE_OK) { 
       [self showUIAlertViewWithMessage:@"fail to create table" andtitle:@"error"]; 
      } 
      sqlite3_close(_db); 
     } 
     else{ 
      NSLog(@"fail to register"); 

      [self showUIAlertViewWithMessage:@"fail to open/create table" andtitle:@"error"]; 
     } 


} 
} 




- (IBAction)GREATEPROFILE:(id)sender { 

    sqlite3_stmt*statement; 
    const char*dbspath=[_databasepath UTF8String]; 
    if (sqlite3_open(dbspath, &_db)==SQLITE_OK) { 
     NSString*insert_sql=[NSString stringWithFormat:@"INSERT INTO userss(name,age,gender,female,height,weight,blood,email,password,conformpwd)values(\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")",self.name.text,self.age.text,self.gender.text,self.female.text,self.height.text,self.weight.text,self.blood.text,self.email.text,self.password.text,self.conformpwd.text]; 
       const char*insert_statement=[insert_sql UTF8String]; 
     sqlite3_prepare_v2(_db, insert_statement,-1, &statement,NULL); 
     if (sqlite3_step(statement)==SQLITE_DONE) { 
      [self showUIAlertViewWithMessage:@"user add to data base" andtitle:@"message"]; 

      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 
      [email protected]""; 

     } 
     else{ 
      [self showUIAlertViewWithMessage:@"fail to add in database" andtitle:@"error"]; 
     } 
     sqlite3_finalize(statement); 
     sqlite3_close(_db); 
    } 
     } 

ответ

0

Я думаю, что проблема здесь. У вас есть CREATE TABLE IF NOT EXITS, но это должно быть EXISTS

Вы также не хотите использовать форматированную строку для вставки значений переменных. Вместо этого используйте операции привязки. См. here для получения дополнительной информации.

int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*)); 
int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64, 
        void(*)(void*)); 
int sqlite3_bind_double(sqlite3_stmt*, int, double); 
int sqlite3_bind_int(sqlite3_stmt*, int, int); 
int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64); 
int sqlite3_bind_null(sqlite3_stmt*, int); 
int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*)); 
int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*)); 
int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64, 
        void(*)(void*), unsigned char encoding); 
int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*); 
int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n); 
Смежные вопросы