从sqlite检索数据时出现问题

时间:2011-06-27 15:32:45

标签: iphone objective-c xcode sqlite nsmutablearray

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

现在我的问题是,新显示在表中的数据是被删除的数据,所以我试图打印我的可变数组,在日志中我看到他们没有这样的数据但是在表视图中也是如此我看到那个数据。下面给出的是我在db

中读取数据的代码
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
   NSString *databasePath =  [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"];

    sqlite3 *database;

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        // Setup the SQL Statement and compile it for faster access
        const char *sqlStatement = "SELECT potsName FROM potsDetail;";
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            while(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(@"The data in the array is %@",potsArray);

            }
        }
        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);

还有我在刷新按钮上调用的代码

-(IBAction)RefreshButtonTouched
{
    [potsArray removeAllObjects];
    [self Read_Potname_FromDB];
    [potsTableView reloadData];
}

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

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    NSString *databasePath =  [documentsDir stringByAppendingPathComponent:@"PotsDB.sqlite"];

    sqlite3 *database;

    if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
        // Setup the SQL Statement and compile it for faster access
        NSString *deleteStatement = [NSString stringWithFormat:@"delete from potsDetail where potsName = '%@'",sptr];
        const char *sqlStatement = [deleteStatement cStringUsingEncoding:NSASCIIStringEncoding];
        sqlite3_stmt *compiledStatement;

        if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
            while(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 release];
            }
        }
        // Release the compiled statement from memory
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);

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

2 个答案:

答案 0 :(得分:1)

有两种情况可以在这里发生:

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

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

答案 1 :(得分:1)

您实际上从未删除过sqlite数据库中的数据。 [potsArray removeAllObjects]将删除内存中的版本,而不是存储在磁盘上的版本。您必须使用DELETE FROM查询添加数据库方法才能实际影响sqlite数据库。