在我的Room Dao类中,我有以下查询方法:
@Query("SELECT * FROM word_table WHERE firstName LIKE :word")
fun findByName(word:String): DataSource.Factory<Int, Word>我还希望检索带有通配符的名称,其中单词的开头和结尾可以是任何内容。
在一些SQL查询中,我看到%是在开头和结尾添加的(在我的例子中,它是"%" + :word + "%"吗?),但我不知道如何在Room中这样做。
发布于 2021-11-09 12:55:56
如何在房间持久库(安卓)中使用SQL卡
这就是我如何做到这一点的。
第一步
在你的DAO课上
@Query("SELECT * FROM word_table WHERE firstName LIKE :word") fun findByName(word:String):List<YouDataModel>
注意:我以列表的形式返回结果,你可以以任何你想要的方式返回它
第二步
在View Model类中
var searchResult = MutableLiveData<List<YouDataModel>>()
fun findByName(word: String?): LiveData<List<YouDataModel>> {
viewModelScope.launch(Dispatchers.IO) {
val result = adsRepo.findByName(word)
searchResult .postValue(result)
}
return searchResult
}STEP THERE
在你的活动或片段中
val viewModel = ViewModelProvider(this).get(YourModelClassName::class.java)
viewModel.searchResult("%${search.text}%").observe(viewLifecycleOwner, Observer{
Log.d("TAG", "${it.size}")
})注意: SQL通配符是作为此视图模型函数searchResult("%${search.text}%")中的参数传入的。
发布于 2019-12-18 00:01:36
这是一个全文搜索(FTS)功能,在声明表时必须启用该功能。它是SQLIte的一项功能。
这是一个存储库,您可以在其中找到一些信息:https://github.com/android/architecture-components-samples/commit/c0d72f210241ff310bba13db9b8748081d6feab9
这里有一篇文章可以指导你完成这个过程:https://medium.com/@sienatime/enabling-sqlite-fts-in-room-2-1-75e17d0f0ff8
祝好运
https://stackoverflow.com/questions/59377571
复制相似问题