作为标题,如何使用Vacuum来缩小使用FMDB的SQLite数据库?
提前致谢!
答案 0 :(得分:1)
感谢您的支持 我找到了答案:[数据库executeUpdate:@“vacuum”];
答案 1 :(得分:-1)
1.Database Updating
我有一个数据库控制器 - 我最新应用程序中的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.Database Migration
[self.database executeUpdate:@"CREATE TABLE if not exists tags "
"(uniqueID TEXT UNIQUE, name TEXT, deleted INTEGER, deletedModificationDate DATE);"];
我希望,它会对你有帮助。