[英]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);"];
数据库获取
要获取对象,该应用会调用:
全选
-[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.