Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 循环使用SQLite_主表并删除表_Iphone_Objective C_Sql_Ios_Sqlite - Fatal编程技术网

Iphone 循环使用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

下面的代码部分工作。它应该返回sqlite_主表中的所有表,然后删除它们

 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。