Цикл по таблице SQLite_master и удаление таблиц - PullRequest
1 голос
/ 27 февраля 2012

Код ниже частично работает.Он должен вернуть все таблицы в таблице 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]

Почему это?Это потому, что пока я в цикле, база данных используется?Буду ли я лучше помещать результаты в массив, чем циклически проходить и удалять таблицы таким образом?Нет исключений / сбоев и т. Д., И исполняемый файл выполняется.

1 Ответ

1 голос
/ 27 февраля 2012

Попробуйте завершить использование sqlite3_finalize после каждого удаления.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...