【发布时间】:2012-03-16 19:52:39
【问题描述】:
下面的代码部分有效。它应该返回 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]; 之后,表并没有被删除。
删除表只是一个接受 sql 的sqlite3_exec:[NSString stringWithFormat:@"DROP TABLE IF EXISTS '%@'", tableName]
这是为什么?是因为当我在循环中时数据库正在使用中?我会更好地将结果放在一个数组中,而不是这样循环和删除表吗?没有抛出异常/崩溃等,并且正在执行 exec。
【问题讨论】:
标签: iphone objective-c sql ios sqlite