繁体   English   中英

如何在FMDB iOS中使用Vacuum

[英]How to use Vacuum in FMDB iOS

作为标题,如何使用Vacuum使用FMDB收缩SQLite数据库?

提前致谢!

感谢您的所有支持,我已经找到了答案:[数据库executeUpdate:@“ vacuum”];

1.数据库更新

我有一个数据库控制器-我最新的应用程序中的VSDatabaseController-通过FMDB与SQLite对话。 FMDB区分更新和查询。 要更新应用调用的数据库:

-[VSDatabaseController runDatabaseBlockInTransaction:(VSDatabaseUpdateBlock)databaseBlock]

VSDatabaseUpdateBlock很简单:

typedef void (^VSDatabaseUpdateBlock)(FMDatabase *database);

runDatabaseBlockInTransaction也很简单:

- (void)runDatabaseBlockInTransaction:(VSDatabaseUpdateBlock)databaseBlock {
    dispatch_async(self.serialDispatchQueue, ^{
        @autoreleasepool {
            [self beginTransaction];
            databaseBlock(self.database);
            [self endTransaction];
        }
    });
}

这是调用更新数据库的简单示例:全选

- (void)emptyTagsLookupTableForNote:(VSNote *)note {
    NSString *uniqueID = note.uniqueID;
    [self runDatabaseBlockInTransaction:^(FMDatabase *database) {
        [database executeUpdate:
            @"delete from tagsNotesLookup where noteUniqueID = ?;", uniqueID];
    }];
}

[self.database executeUpdate:
    @"CREATE INDEX if not exists noteUniqueIDIndex on tagsNotesLookup (noteUniqueID);"];
  1. 数据库获取

    要获取对象,该应用会调用:

全选

-[VSDatabaseController runFetchForClass:(Class)databaseObjectClass 
                             fetchBlock:(VSDatabaseFetchBlock)fetchBlock 
                      fetchResultsBlock:(VSDatabaseFetchResultsBlock)fetchResultsBlock];
These two lines do much of the work:
SELECT ALL
FMResultSet *resultSet = fetchBlock(self.database);
NSArray *fetchedObjects = [self databaseObjectsWithResultSet:resultSet 
                                                       class:databaseObjectClass];

使用FMDB提取数据库将返回FMResultSet。 通过该resultSet,您可以逐步完成并创建模型对象。

3,保持对象在内存中

FMResultSet * resultSet = [self.database executeQuery:@“从some_table中选择uniqueID”];

4,Web API

- (void)uploadNote:(VSNote *)note {
    VSNoteAPICall *apiCall = [[VSNoteAPICall alloc] initWithNote:[note detachedCopy]];
    [self enqueueAPICall:apiCall];
}

5,处理Web API返回值

VSNote *cachedNote = [self.mapTable objectForKey:downloadedNote.uniqueID];

6,数据库迁移

[self.database executeUpdate:@"CREATE TABLE if not exists tags "
    "(uniqueID TEXT UNIQUE, name TEXT, deleted INTEGER, deletedModificationDate DATE);"];

希望对您有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM