iphone - как очистить базу данных SQLite? - PullRequest
2 голосов
/ 20 октября 2010

У меня есть приложение для iphone, которое использует базу данных SQLite, все работает, и я могу сохранить базу данных в файл и загрузить ее обратно при перезагрузке приложения. Но у меня проблема в том, что я не знаю, как очистить базу данных и начать все заново.

Я попытался удалить файл базы данных, из-за этого приложение при следующем перезапуске приложения запустит новую базу данных с нуля, однако я хотел бы знать, как не просто удалить файл базы данных, но и очистить его. Недостаточно памяти, все вместе и запустите новую базу данных без необходимости перезапуска приложения.

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

Ваш запрос SQLite должен выглядеть примерно так:

DELETE * from [table name]

... и вы просто повторяете это для каждой таблицы в базе данных.

Ref: http://www.sqlite.org/lang_delete.html

0 голосов
/ 19 июля 2013

Итак, вы хотите удалить все файлы * .sqlite? Нет способа избежать зацикливания, но вы можете ограничить его, используя предикат, чтобы сначала отфильтровать не-sql файлы и обеспечить быструю производительность с помощью быстрого перечисления. Вот способ сделать это:

-(void) removeAllSQLiteFiles    
{
    NSFileManager  *manager = [NSFileManager defaultManager];

    // the preferred way to get the apps documents directory
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    // grab all the files in the documents dir
    NSArray *allFiles = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];

    // filter the array for only sqlite files
    NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.sqlite'"];
    NSArray *sqliteFiles = [allFiles filteredArrayUsingPredicate:fltr];

    // use fast enumeration to iterate the array and delete the files
    for (NSString *sqliteFile in sqliteFiles)
    {
       NSError *error = nil;
       [manager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:sqliteFile] error:&error]
       NSAssert(!error, @"Assertion: SQLite file deletion shall never throw an error.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...