2013-11-09 37 views
1

我可能會做這一切都錯了,因爲我還是新的目標C.的iOS檢索sqlite3的數據並將其存儲在NSObject的陣列

我試圖從sqlite3的數據庫中檢索數據並將其存儲在一個NSObject的陣列。

這是我的實現文件中的viewDidLoad方法。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    clients = [[NSMutableArray alloc] init]; 
    [self openDB]; 
    NSString *sql = [NSString stringWithFormat:@"SELECT * FROM clients"]; 
    sqlite3_stmt *statement; 

    if(sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil)==SQLITE_OK) 
    { 
     while (sqlite3_step(statement)==SQLITE_ROW) { 
      char *field1 = (char *) sqlite3_column_text(statement, 0); 
      NSString *field1Str = [[NSString alloc]initWithUTF8String:field1]; 

      char *field2 = (char *) sqlite3_column_text(statement, 1); 
      NSString *field2Str = [[NSString alloc]initWithUTF8String:field2]; 

      char *field3 = (char *) sqlite3_column_text(statement, 2); 
      NSString *field3Str = [[NSString alloc]initWithUTF8String:field3]; 

      char *field4 = (char *) sqlite3_column_text(statement, 3); 
      NSString *field4Str = [[NSString alloc]initWithUTF8String:field4]; 

      char *field5 = (char *) sqlite3_column_text(statement, 4); 
      NSString *field5Str = [[NSString alloc]initWithUTF8String:field5]; 

      char *field6 = (char *) sqlite3_column_text(statement, 5); 
      NSString *field6Str = [[NSString alloc]initWithUTF8String:field6]; 

      char *field7 = (char *) sqlite3_column_text(statement, 6); 
      NSString *field7Str = [[NSString alloc]initWithUTF8String:field7]; 

      char *field8 = (char *) sqlite3_column_text(statement, 7); 
      NSString *field8Str = [[NSString alloc]initWithUTF8String:field8]; 

      char *field9 = (char *) sqlite3_column_text(statement, 8); 
      NSString *field9Str = [[NSString alloc]initWithUTF8String:field9]; 


      ClientObj *c1 = [[ClientObj alloc] initWithCompanyName:field1Str firstName:field2Str lastName:field3Str email:field4Str workPhone:field5Str mobilePhone:field6Str streetAddress:field7Str city:field8Str postalCode:field9Str]; 
     } 
    } 

    self.clients = [NSArray arrayWithObjects:c1,c2,c3,c4, nil]; 

} 

我想增加* c1每次while語句循環通過數據庫。例如。 c1,c2,c3,c4

然後,我試圖將從數據庫循環創建的每個ClientObj添加到客戶端數組,但我不知道如何執行此操作。

任何幫助或建議是非常讚賞

+1

您忘記了調用[sqlite3_finalize](http://www.sqlite.org/c3ref/finalize.html)。 –

回答

2

循環之前一次初始化數組:

self.clients = [[NSMutableArray alloc] init]; 

,然後就每一個客戶對象添加到陣列內環路:

while (sqlite3_step(statement) == SQLITE_ROW) { 
    // ... 
    ClientObj *c = [[ClientObj alloc] initWithCompanyName:field1Str firstName:field2Str lastName:field3Str email:field4Str workPhone:field5Str mobilePhone:field6Str streetAddress:field7Str city:field8Str postalCode:field9Str]; 
    [self.clients addObject:c]; 
} 
+0

+1 ....我剛剛發佈相同的.. –

+0

或** [self.clients arrayByAddingObject:c]; ** –

+1

@KumarKl:但這樣做效率不高,因爲它在每個步驟中都會創建一個新數組。 –

相關問題