2011-02-09 91 views
0

我有多個視圖控制器,registrationviewcontroller,contactsviewcontroller,addnewcontactsviewcontroller等大麻煩與值不插入到SQLite數據庫-iPhone

我在registrationviewcontroller

DatabaseCRUD *database = [[DatabaseCRUD alloc] init]; 
     NSMutableString *registrationquery=[NSMutableString stringWithFormat:@"insert into BARvalues values ('%@','%@','%@','%@','%@','%@')",[name text],[emailAddress text],[mobileNumber text],[password text],[country text],@"0"]; 
     NSLog(@"registrationquery is %@",registrationquery); 
      [database updatenewregistration:registrationquery]; 
      [database release]; 

      DatabaseCRUD *database1 = [[DatabaseCRUD alloc] init]; 
      NSMutableString *registrationquery1=[NSMutableString stringWithFormat:@"insert into contacts values ('1234','1234')"]; 
      NSLog(@"registrationquery is %@",registrationquery1); 
      [database1 updatenewregistration:registrationquery1]; 
      [database1 release]; 

      DatabaseCRUD *database2 = [[DatabaseCRUD alloc] init]; 
      NSMutableString *registrationquery2=[NSMutableString stringWithFormat:@"insert into contacts values ('abcd','abcd')"]; 
      NSLog(@"registrationquery is %@",registrationquery2); 
      [database2 addcontacts:registrationquery2]; 
      [database2 release]; 

上述代碼作品下面的代碼很好。它將值插入sqlite數據庫。這裏是問題,我有一個不同的viewcontroller(聯繫人,addcontacts)幾乎相同的代碼和值不會插入sqlite數據庫。這裏是代碼。

DatabaseCRUD *database = [[DatabaseCRUD alloc] init]; 
NSMutableString *registrationquery=[NSMutableString stringWithFormat:@"insert into contacts values ('raja','shekar')"]; 
NSLog(@"registrationquery is %@",registrationquery); 
[database updatenewregistration:registrationquery]; 
[database release]; 

DatabaseCRUD *database1 = [[DatabaseCRUD alloc] init]; 
NSMutableString *registrationquery1=[NSMutableString stringWithFormat:@"insert into contacts values ('rajesh','neelam')"]; 
NSLog(@"registrationquery is %@",registrationquery1); 
[database1 addcontacts:registrationquery1]; 
[database1 release]; 

我沒有看到有任何理由對數據庫對象將insertin在一個視圖 - 控制和犯規在其他視圖 - 控制。任何幫助將不勝感激。我試圖找出哪裏錯誤是整天,我不想再浪費時間。任何幫助請?

我在數據庫對象的每個方法上放置了斷點,看它是否插入,根本沒有錯誤。它似乎通過sqlstatment傳遞,但沒有插入發生。這裏是保存databaseHere中的值的代碼是數據庫插入的代碼。

-(void) addcontacts :(NSString *)query 
{ 

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
    { 
     NSLog(@"query is %@",query); 
     sqlStatement=[query cStringUsingEncoding:NSASCIIStringEncoding]; 

     if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) 
     { 
      while(sqlite3_step(compiledStatement) == SQLITE_ROW) 
      { 
       NSLog(@"new contact updated"); 
      } 
      sqlite3_finalize(compiledStatement); 
     } 
     sqlite3_close(database); 
    } 
} 
+0

compileStatement定義在哪裏? (s/b sqlite3_stmt * compiledStatement = nil;)如果這是在addcontacts方法中定義的,那最好。 – KevinDTimm

+0

還有一件事,插入sqlite3_step返回SQLITE_DONE,而不是SQLITE_ROW – KevinDTimm

+0

@kevinDTimm我沒有在我的updatenewregistration方法SQLITE_DONE,但它仍然插入。像我說的,這兩種方法從registrstionviewcontroller工作正常,他們不工作從其他視圖控制器 – Rajashekar

回答

0

這是介於答案和評論之間的地方 - 根據需要進行解釋。

我假設insert語句返回一些錯誤代碼,是否正確?他們的價值是什麼?這會給你提供很長的解決方案。

+0

在每個數據庫對象的方法中放置斷點以查看它是否插入,根本沒有錯誤。它似乎通過sqlstatment傳遞,但沒有插入發生。這裏是保存數據庫中的值的代碼。 – Rajashekar

+0

下面是不插入到數據庫中的代碼 - (無效)addcontacts:(的NSString *)查詢 { \t \t如果(sqlite3_open([databasePath UTF8字符串],&數據庫)== SQLITE_OK) \t { \t \t NSLog(@「query is%@」,query); \t \t sqlStatement = [query cStringUsingEncoding:NSASCIIStringEncoding]; \t \t \t 如果\t(sqlite3_prepare_v2(數據庫,的SQLStatement,-1,&compiledStatement,NULL)== SQLITE_OK) \t \t { \t \t \t而(sqlite3_step(compiledStatement)== SQLITE_ROW) \t \t \t { \t \t \t \t NSLog(@「new contact updated」); \t \t \t} \t \t \t sqlite3_finalize(compiledStatement); \t \t} \t \t sqlite3_close(database); \t} } – Rajashekar

+0

@Rajashekar - 將此代碼添加到您的文章,它不可作爲評論 – KevinDTimm