2010-10-19 2 views
2

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

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

ответ

1

Ваш SQLite запрос должен быть чем-то вроде этого:

DELETE * from [table name] 

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

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

0

Итак, вы хотите, чтобы удалить все * .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."); 
    } 
} 
Смежные вопросы