iphone - 遍历 SQLite_master 表并删除表

标签 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]; 之后,表并没有被删除。

delete table 只是一个 sqlite3_exec 接受 sql: [NSString stringWithFormat:@"DROP TABLE IF EXISTS '%@'", tableName]

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

最佳答案

尝试在每次删除后使用 sqlite3_finalize 完成。

希望对你有帮助。

关于iphone - 遍历 SQLite_master 表并删除表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9463363/

相关文章:

mysql - SQL COUNT(*) 在 PostgreSQL 中不起作用,但在 MySQL 中不起作用

iphone - 如何在iOS中的UITableViewCell中制作渐变背景?

objective-c - 根据来自另一个NSArray的字符串对NSMutableArray进行排序

iphone - 当我返回我的应用程序而不检查状态栏框架时,我如何知道电话何时在通话中?

ios - 由于 TableView Controller 初始化,应用程序崩溃

ios - 让 UIView 响应快速、快速的单击的最佳方法是什么?

sql - 如何在 SSIS 的数据转换转换过程中将字符串转换为货币?

sql - 在spark中找到两个表之间最接近的时间

iphone - 如何从核心数据库获取最后插入的记录?

iPhone - 为 NSSortDescriptor 创建定义...这可能吗?