更好的方法来快速查询sqlite数据库
我正在制作一个文字游戏,并使用sqlite数据库捆绑了一个完整的英文单词列表。我试图找到最好的方式来搜索数据库的给定字符串,以确定它是否是一个字。更好的方法来快速查询sqlite数据库
在这一点上,我可以得到整个数据库进行到一个数组:
func fetchWords() {
if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext {
let wordsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "EnglishWord")
do {
englishWords = try managedObjectContext.fetch(wordsFetch) as! [EnglishWord]
print(englishWords[123323].word)
//Prints "injustices"
} catch {
//error handling
}
}
}
现在。我真正想做的是传入一个给定的字符串,看看它是否作为我的数据库中的单词存在。我有谓词笨重的解决方案,例如:
func fetchWordsToArray() {
if let managedObjectContext = (UIApplication.shared.delegate as? AppDelegate)?.managedObjectContext {
let wordsFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "EnglishWord")
let searchWord = ["dastardly"]
let searchPredicate = NSPredicate(format: "word = %@", argumentArray: searchWord)
do {
englishWords = try managedObjectContext.fetch(wordsFetch) as! [EnglishWord]
let resultFilteredByPredicate = (englishWords as NSArray).filtered(using: predicate)
print(resultFilteredByPredicate)
} catch {
//error handling
}
}
}
但为了使用过滤功能,我要转换为一个NSArray这意味着我不能直接与工作成果(如获得resultFilteredByPredicate.word) 。
此外,感觉就像我可能会用这种错误的方式去做。由于首先必须进入数组,所以我必须首先丧失使用sqlite数据库的许多价值。
任何建议的方法,以更好地使用数据库?
非常感谢您的帮助!
为了使数据库做过滤(然后可以使用索引自动优化),put a predicate on the original fetch request:
let formatRequest : NSFetchRequest<Word> = Word.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "word == %@", searchWord)
let fetchedResults = try context.fetch(fetchRequest) as! [Word]
但是核心数据是管理你的对象的框架。 如果您认为你的话是不是对象,但只值,你可以与直接做SQL一些其他库替换核心数据,并执行一个SQL查询,而不是:
SELECT * FROM EnglishWord WHERE word = ?
嘿谢谢你的回应CL。我把这个放在心上“但是Core Data是一个管理对象的框架,如果你决定你的单词不是对象而只是数值,你可以用一些其他直接执行SQL的库来替换Core Data”,最后使用SQLite。迅速,感觉更适合我的需求。再次感谢! – enesefuu
根据您发布的代码,这ISN对于SQLite的问题,这是一个核心数据问题。 – rmaddy
有道理。只需将核心数据添加为标签即可。谢谢 – enesefuu