Iphone 循环使用SQLite_主表并删除表
下面的代码部分工作。它应该返回sqlite_主表中的所有表,然后删除它们Iphone 循环使用SQLite_主表并删除表,iphone,objective-c,sql,ios,sqlite,Iphone,Objective C,Sql,Ios,Sqlite,下面的代码部分工作。它应该返回sqlite_主表中的所有表,然后删除它们 NSString *sql = [NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table';"]; sqlite3_stmt *statement = [database prepare:sql]; if(statement != nil) { whi
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\u exec
,它接受sql:[NSString stringWithFormat:@“如果存在“%@”,则删除表,tableName]
为什么会这样?是因为当我在循环中时数据库正在使用吗?我将结果放在一个数组中,而不是以这种方式循环并删除表,这样会更好吗?没有引发异常/崩溃等,并且正在执行exec。每次删除后,请尝试使用sqlite3\u finalize
完成
希望这对您有所帮助。尝试在每次删除后使用sqlite3\u finalize
完成
希望这对您有所帮助。我想您的意思是在删除时完成sqlite3_exec,而不是状态?是的。我发现在任何影响数据库的调用之后,都必须调用finalize。我想您的意思是在删除时finalize sqlite3_exec,而不是station?是的。我发现,在任何影响数据库的调用之后,都必须调用finalize。