【问题标题】:Problem in retriving data from sqlite从 sqlite 检索数据的问题
【发布时间】:2011-09-23 15:05:36
【问题描述】:

您好,我正在使用 sqlite,我已成功将数据添加到数据库中,但问题是当我删除其他表视图中的一些数据并导航回我的主视图时,我按下 UIBarButton 调用再次检查数据库中数据的函数。

现在我的问题是新显示在表格中的数据是被删除的数据,所以我尝试打印我的可变数组,在日志中我看到它们不是这样的数据,但在表格视图中也是如此单元格我看到了该数据。下面给出的是我读取数据库中数据的代码

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDir = [documentPaths objectAtIndex:0]; NSString *databasePath = [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"]; sqlite3 *数据库; if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { // 设置 SQL 语句并编译它以便更快地访问 const char *sqlStatement = "SELECT potsName FROM potsDetail;"; sqlite3_stmt *compiledStatement; if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 而(sqlite3_step(compiledStatement)== SQLITE_ROW){ NSString *Potname=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 0)]; NSString * pname = [[NSString alloc]initWithFormat:@"%@",Potname]; [potsArray addObject:pname]; NSLog(@"数组中的数据是%@",potsArray); } } // 从内存中释放编译好的语句 sqlite3_finalize(compiledStatement); } sqlite3_close(数据库);

这也是我在刷新按钮上调用的代码

-(IBAction)RefreshButtonTouched { [potsArray removeAllObjects]; [self Read_Potname_FromDB]; [potsTableView 重新加载数据]; }

我正在写的删除查询,我认为我在这里删除有一些错误

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDir = [documentPaths objectAtIndex:0]; NSString *databasePath = [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"]; sqlite3 *数据库; if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { // 设置 SQL 语句并编译它以便更快地访问 NSString *deleteStatement = [NSString stringWithFormat:@"从 potsDetail 中删除 potsName = '%@'",sptr]; const char *sqlStatement = [deleteStatement cStringUsingEncoding:NSASCIIStringEncoding]; sqlite3_stmt *compiledStatement; if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 而(sqlite3_step(compiledStatement)== SQLITE_ROW){ NSString *Potname=[NSString stringWithUTF8String:(char *) sqlite3_column_text(compiledStatement, 0)]; NSString * pname = [[NSString alloc]initWithFormat:@"%@",Potname]; [potsArray addObject:pname]; //[pname 释放]; } } // 从内存中释放编译好的语句 sqlite3_finalize(compiledStatement); } sqlite3_close(数据库);

请帮我解决这个问题。提前致谢

【问题讨论】:

    标签: iphone objective-c xcode sqlite nsmutablearray


    【解决方案1】:

    这里可能发生两种情况:

    1) 数据实际上并没有被删除,因为你可能没有调用“sqlite3_finalize(compiledStatement);”声明,负责提交任何事务。

    2) UITableView 没有重新加载,你有没有尝试使用“[tableView reloadData];”点击 UIBarbuttonItem?

    【讨论】:

    • 是的,我试过了,你可以在上面的代码中看到我调用了 sqlite3_finalize(compiledStatement);
    • 现在,有 UITableViewCell 的可能性,您是否在 (cell==nil) 范围内设置标签文本????我认为,问题在于在 tableview 上显示标签
    • 是的,这只是可能,因为所有其他代码都是正确的,所以我希望您已将 Label 的文本设置在 (cell==nil) Cheers....的范围之外。
    【解决方案2】:

    您从未真正删除过 sqlite 数据库中的数据。 [potsArray removeAllObjects] 只会删除内存版本,而不是存储在磁盘上的版本。您必须添加一个带有 DELETE FROM 查询的数据库方法才能真正影响 sqlite 数据库。

    【讨论】:

      猜你喜欢
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多