2011-09-07 61 views
0

我成功地将数据添加到我的tableview,但是在表视图中它将检索新数据,旧数据将不会被替换,并且在表视图中它将检索2个相同的我添加的数据。意思我会有“测试,测试,嗨”,当我输入一个新的数据(再见,你好)我将有“测试,测试,嗨,测试,测试,嗨,再见,再见,你好”如何检索tableview中的数据

if你需要额外的代码告诉我,谢谢。

我的代码:

 // ---Retrieve Rows--- 
    -(void) getAllRowsFromTableNamed: (NSString *) tableName { 
     [self openDB]; 
     NSString *qsql = @"SELECT * FROM Favourites"; 
     sqlite3_stmt *statement; 

     if (sqlite3_prepare_v2(db, [qsql UTF8String], -1, &statement, nil) == 
      SQLITE_OK) { 
      // Setup the SQL Statement and compile it for faster access 
      while (sqlite3_step(statement) == SQLITE_ROW) 
      { 

       // Read the data from the result row 
       char *field1 = (char *) sqlite3_column_text(statement, 0); 
       self.field1Str = [[NSString alloc] initWithUTF8String: field1]; 

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


       NSString *stringValue = [[NSString alloc] initWithUTF8String: field1]; 
       [self.listArray addObject:stringValue]; 
       [stringValue release]; 

       NSLog(@"Address : %@ Description : %@", self.field1Str, self.field2Str); 

      } 
     } 
     // Release the compiled statement from memory 
     sqlite3_finalize(statement); 
     sqlite3_close(db); 
     NSLog(@"DATA RETRIEVED"); 
    } 
    //---End of Retrieve Row--- 



     - (NSInteger)tableView:(UITableView *)tableView 
     numberOfRowsInSection:(NSInteger)section 
     { 
      return [self.listData count]; 
     } 

     - (UITableViewCell *)tableView:(UITableView *)tableView 
       cellForRowAtIndexPath:(NSIndexPath *)indexPath 
     { 
      static NSString *TableIdentifier = @"TableIdentifier"; 
      UITableViewCell *cell = [tableView 
            dequeueReusableCellWithIdentifier:TableIdentifier]; 
      if (cell == nil) { 
       cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault 
               reuseIdentifier:TableIdentifier] autorelease]; 
      } 

      NSUInteger row = [indexPath row]; 
      cell.textLabel.text = [listData objectAtIndex:row]; 
      return cell; 

     } 

    - (void) viewWillAppear:(BOOL)animated { 
     [self getAllRowsFromTableNamed:@"Favourites"]; 

     NSArray *array = [[NSArray alloc] initWithObjects:self.field1Str, self.field2Str, nil]; 

     [self.listArray addObjectsFromArray:array]; 
     [array release]; 
     [favouriteListTableView reloadData]; 
     //NSLog(@"String1:%@, String2:%@", self.string1, self.string2); 
    } 
============================================================================================ 
-(void) insertRecordIntoTableNamed: (NSString *) tableName 
         withField1: (NSString *) field1 field1Value: (NSString *) field1Value 
         andField2: (NSString *) field2 field2Value: (NSString *) field2Value { 
    [self openDB]; 
    NSString *sql = [NSString stringWithFormat: 
        @"INSERT OR REPLACE INTO '%@' ('%@', '%@') VALUES ('%@','%@')", 
        tableName, field1, field2, field1Value, field2Value]; 

    char *err; 
    if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) 
    { 
     sqlite3_close(db); 
     NSAssert(0, @"Error updating table."); 

    } 
    NSLog(@"DATA RECORDED"); 

} 

-(IBAction)doneButton:(id)sender { 
    if([addressTextField.text isEqualToString:@""] || [descriptionTextField.text isEqualToString:@""]){ 
     UIAlertView *alert = [[UIAlertView alloc] 
           initWithTitle:@"Invalid Input!" 
           message:@"Please enter Address or Description" 
           delegate:self 
           cancelButtonTitle:@"OK" 
           otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } 
    else{ 
    [self insertRecordIntoTableNamed:@"Favourites" 
          withField1:@"address" field1Value:addressTextField.text 
          andField2:@"description" field2Value:descriptionTextField.text]; 

    NSArray *viewControllers = [self.navigationController viewControllers]; 

    FavouriteListViewController *favouriteListVC = (FavouriteListViewController *)[viewControllers objectAtIndex:viewControllers.count - 2]; 

    [favouriteListVC setString1:self.field1Str]; 
    [favouriteListVC setString2:self.field2Str]; 
    [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 
+0

首先检查您从数据库中获取了多少数据并打开数据库并检查数据库中存储了多少数据? –

+0

如果我添加它将被添加到数据库中并且数量是正确的,但它只在tableview中显示2行。 – John2

+0

正如SElanthiraiyan所说的,当你检索它时,你必须在listdata数组中添加数据。 –

回答

0

你必须从数据库中检索他们之后将数据添加到了listData阵列。

while (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      // Read the data from the result row 
      char *field1 = (char *) sqlite3_column_text(statement, 0); 
      NSString *stringValue = [[NSString alloc] initWithUTF8String: field1]; 
      [self.listData addObject:stringValue]; 
      [stringValue release]; 

     } 

您只获取行,因为在listData数组中只有两个对象存在。