更好的方法来快速查询sqlite数据库

更好的方法来快速查询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数据库的许多价值。

任何建议的方法,以更好地使用数据库?

非常感谢您的帮助!

+1

根据您发布的代码,这ISN对于SQLite的问题,这是一个核心数据问题。 – rmaddy

+0

有道理。只需将核心数据添加为标签即可。谢谢 – enesefuu

为了使数据库做过滤(然后可以使用索引自动优化),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 = ? 
+0

嘿谢谢你的回应CL。我把这个放在心上“但是Core Data是一个管理对象的框架,如果你决定你的单词不是对象而只是数值,你可以用一些其他直接执行SQL的库来替换Core Data”,最后使用SQLite。迅速,感觉更适合我的需求。再次感谢! – enesefuu