Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 搜索查询词不应是数据库中任何数据的前缀_Sqlite_Android Room - Fatal编程技术网

Sqlite 搜索查询词不应是数据库中任何数据的前缀

Sqlite 搜索查询词不应是数据库中任何数据的前缀,sqlite,android-room,Sqlite,Android Room,给表用户_DNA和列一个序列, 我想写一个查询,如果序列列中的数据匹配或是搜索查询词的前缀,它应该返回一个find或true项。 e、 g, 序列 狗 霍 猫 钨极氩弧焊 猫 如果我的搜索查询是doga在db中以dog作为前缀,horblehas hor在db中作为前缀,tigerhas tig在db中作为前缀,caterpillarhas cat在db中作为前缀,那么查询应该返回true,因为所有这些搜索查询在数据库中都有前缀 我的sql搜索查询应该是什么 谢谢如果您使用Room,您可以使用K

给表用户_DNA和列一个序列, 我想写一个查询,如果序列列中的数据匹配或是搜索查询词的前缀,它应该返回一个find或true项。 e、 g,

序列

钨极氩弧焊

如果我的搜索查询是doga在db中以dog作为前缀,horblehas hor在db中作为前缀,tigerhas tig在db中作为前缀,caterpillarhas cat在db中作为前缀,那么查询应该返回true,因为所有这些搜索查询在数据库中都有前缀

我的sql搜索查询应该是什么


谢谢

如果您使用Room,您可以使用Kotlin尝试此功能:

@Query("select * from User_DNA WHERE sequence LIKE :search")
fun getItem(search: String): UserDNA?
将搜索参数设置为此方法时,应将搜索模式设置为[your search string]%,例如:dog%

如果我的搜索查询是dog,则查询应返回true或 项目dogsequence/doggysequence什么是有效的

您可以检查查询的结果——如果为null,则列中没有匹配的值

更新

如果你想找到hor,我可以提出下一种方法,也许这是RegExp的任务,但老实说,我还没有在房间里使用过:

您可以在DAO中放置两种方法。一种方法是辅助的,它的任务是用我们想要找到的单词填充一个列表。例如,对于可怕的模式,该方法应该准备带有{恐怖,恐怖,恐怖,恐怖,恐怖,恐怖}的列表。 第二个方法应该从SQLite获取一个结果,您的字段保存步骤1中准备的列表中的值。此方法应使用房间注释进行注释。 所以第一个方法准备列表,调用查询在SQLite中搜索单词,并将其返回到ViewModel或存储库。 大概是这样的:

@Query("select * from User_DNA WHERE sequence IN (:search) ORDER BY sequence")
fun getItem(search: List<String>): User_DNA?

fun findItem(search: String): User_DNA? {
    val searchList = mutableListOf<String>()
    val minimalStringLength = 2 // it's up to you, maybe 1?
    while (search.length > minimalStringLength) {
        searchList.add(search)
        search = search.dropLast(1)
    }
    return getItem(searchList.toList())
}

谢谢你的回复,我为我错误地举了一个错误的例子而道歉。我已经更新了问题。若我将搜索词作为数据库中某个项目的前缀,则您的答案是正确的。对此再次表示歉意。第二个比第一个有趣。更新答案。