Код ниже частично работает.Он должен вернуть все таблицы в таблице 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]
Почему это?Это потому, что пока я в цикле, база данных используется?Буду ли я лучше помещать результаты в массив, чем циклически проходить и удалять таблицы таким образом?Нет исключений / сбоев и т. Д., И исполняемый файл выполняется.