下面的代码部分有效。它应该返回 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/