为简单起见,我有一个URL表及其书签数据。
这是我创建表格,插入记录,从url获取书签和从书签获得url的方式:
- (void)createTableForDatabase:(FMDatabase*)db {
NSString* createTableSQL = @"CREATE BookmarkURLs (url TEXT, bookmark BLOB)";
[db executeUpdate:createTableSQL];
}
- (void)insertNewRecordWithURL:(NSURL*)url forDatabase:(FMDatabase*)db {
NSData* bookmarkData = [self bookmarkForURL:url];
NSString* insertSQL = @"INSERT INTO BookmarkURLs (url, bookmark) VALUES(?,?)";
[db executeUpdate:insertSQL withArgumentsInArray:@[url.absoluteString, bookmark]];
}
- (NSData*)bookmarkForURL:(NSURL*)url {
return [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope | NSURLBookmarkResolutionWithoutUI
includingResourceValuesForKeys:nil
relativeToURL:nil
error:nil];
}
- (NSURL*)urlForBookmark:(NSData*)bookmark {
BOOL bookmarkIsStale = NO;
NSError* theError = nil;
NSURL* bookmarkURL = [NSURL URLByResolvingBookmarkData:bookmark
options:NSURLBookmarkResolutionWithoutUI
relativeToURL:nil
bookmarkDataIsStale:&bookmarkIsStale
error:&theError];
if (bookmarkIsStale || (theError != nil)) {
// Handle any errors
return nil;
}
return bookmarkURL;
}
现在,我不时要遍历所有记录,解析书签,并检查文件是否已重命名/移动并更新URL。为什么这样做是查询所有书签,然后为每个书签解析其URL并更新其记录。我认为这不是最佳解决方案性能。 有一种方法可以通过一个sql执行操作,如何执行?