1
以下代碼部分起作用。它應該返回sqlite_master表中的所有表,然後刪除它們。通過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];
後,表格未被刪除。
刪除表只是一個sqlite3_exec
其接受SQL:[NSString stringWithFormat:@"DROP TABLE IF EXISTS '%@'", tableName]
這是爲什麼?是否因爲我在循環中正在使用數據庫?我會更好地把結果放在一個數組中,而不是以這種方式循環和刪除表?沒有異常拋出/崩潰等,執行正在執行。
我假設你的意思是敲定sqlite3_exec上的刪除而不是陳述? – JonWells 2012-02-27 16:36:58
是的。我發現在任何影響數據庫的調用之後,你真的必須調用finalize。 – 2012-02-27 18:13:38