Java 为什么Android Room@Query LIKE不返回已知存在的数据

Java 为什么Android Room@Query LIKE不返回已知存在的数据,java,android-sqlite,android-room,Java,Android Sqlite,Android Room,我的问题:我不确定为什么这个安卓房间查询没有返回结果。我认为我理解了正确的编码,而且似乎很简单。如果我使用SQLiteStudio将同一个查询直接传递到同一个数据库,就会得到结果 调用代码(我硬编码字符串'truth'来测试它): List tableId=researchDatabase.getCommentsDao().customSearchCommentsTable(“真理”); DAO代码(包含在CommentsDao中): @Query(“从注释中选择CommentID,注释类似:

我的问题:我不确定为什么这个安卓房间查询没有返回结果。我认为我理解了正确的编码,而且似乎很简单。如果我使用SQLiteStudio将同一个查询直接传递到同一个数据库,就会得到结果

调用代码(我硬编码字符串'truth'来测试它):

List tableId=researchDatabase.getCommentsDao().customSearchCommentsTable(“真理”);
DAO代码(包含在CommentsDao中):

@Query(“从注释中选择CommentID,注释类似:value”)
列表customSearchCommentsTable(字符串值);
我所做的:我对Android Room还不熟悉,但我一直在使用Android开发者(developer.Android.com)提供的所有示例和经验教训,并在stackoverflow上回顾和应用了许多与此密切相关的帖子,但我无法得到任何结果。当我逐步阅读代码时,实际的Android Room代码似乎没有将变量字符串绑定到语句,尽管我可以看到参数字符串被正确识别和传递,这不是我编写的代码,或者至少我从未看到结果绑定字符串与变量数据,我只看到以下内容:

从注释中选择CommentID,注释类似于

我的目标是什么:这实际上是创建一个查询以处理类似于此的多重查询的第一步,我认为这需要@RawQuery设置。现在,我无法让这件简单的事情运作起来

@Query包装器中发生了什么:我意识到我在这里可能是天真和错误的,但是下面我可以看到参数和语句都被传递了,但是它看起来不像“_statement.bindString”实际上是在将“:value”('truth')绑定到语句,并且返回0个结果


这是Android Room开发团队提供的解决方案:

@Query("SELECT CommentID FROM Comments WHERE Comment LIKE '%' || :value || '%'")
List<Integer> customSearchCommentsTable(String value);
@Query(“从注释中选择CommentID,其中注释类似“%”| |:value |‘%”)
列表customSearchCommentsTable(字符串值);

具有讽刺意味的是,开发团队无法让他们发布的代码示例正常工作。当他们回答时,我已经使用@RawQuery方法创建了一个解决方案,以创建正确的SQL语法。

供观众参考:20年2月14日就这一问题开了一张罚单,随后作为一个可能的缺陷于20年3月2日转发给Room development。这个问题的任何更新我都会在解决后发布到这里。(票证网址:)仅供观众参考:客房开发部否认我提出的票证中存在问题,本质上说,不应按照字面意思理解提供的示例。他们提供了一个应该使用的解决方案,其中包括连接通配符。在我看来,99%的官方Android Room开发代码都是按照字面意思提供的,并且是为了教授,或者说,提供它的目的是什么。关于他们的回应和我的观点,这仍然是一个他们拒绝在文档或程序上纠正的错误。习惯这种事情吧。谷歌对安卓缺陷报告的处理只能被形容为极其无能。
@Query("SELECT CommentID FROM Comments WHERE Comment LIKE :value")
List<Integer> customSearchCommentsTable(String value);
@Query("SELECT CommentID FROM Comments WHERE Comment LIKE '%' || :value || '%'")
List<Integer> customSearchCommentsTable(String value);