循环访问SQLite_master表并删除表

时间:2012-02-27 10:21:07

标签: iphone objective-c sql ios sqlite

以下代码部分有效。它应该返回sqlite_master表中的所有表,然后删除它们。

 NSString *sql = [NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table';"];

        sqlite3_stmt *statement = [database prepare:sql];
        if(statement != nil)
        {
            while(sqlite3_step(statement) == SQLITE_ROW)
            {
                NSString* currentTable = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
                if ([currentTable rangeOfString:@"sqlite"].location == NSNotFound && 
                    [currentTable rangeOfString:@"Setting"].location == NSNotFound)
                {
                    NSLog(@"current table: %@", currentTable);
                    [database deleteTable: currentTable];
                }
            }
            sqlite3_finalize(statement);
        }

但是,在调用[database deleteTable: currentTable];后,表格不会被删除。

删除表只是一个sqlite3_exec,它接受​​sql:[NSString stringWithFormat:@"DROP TABLE IF EXISTS '%@'", tableName]

这是为什么?是因为我在循环中数据库正在使用中吗?我会更好地将结果放在一个数组中,而不是循环并删除表格吗?没有异常被抛出/崩溃等,并且正在执行exec。

1 个答案:

答案 0 :(得分:1)

尝试在每次删除后使用sqlite3_finalize进行最终确定。

希望这会对你有所帮助。