我的问题:我不确定为什么此Android Room查询未返回结果。我以为我理解正确的编码,而且看起来很简单。如果我使用SQLiteStudio将同一查询直接传递到同一数据库,则会得到结果。
调用代码(我对字符串“truth”进行了硬编码以对其进行测试):
List<Integer> tableIDs = researchDatabase.getCommentsDao().customSearchCommentsTable("truth");
DAO代码(包含在CommentDao中):
@Query("SELECT CommentID FROM Comments WHERE Comment LIKE :value")
List<Integer> customSearchCommentsTable(String value);
我做了什么:我是Android Room的新手,但是我一直在使用Android开发人员(developer.android.com)的所有示例和 class ,并在stackoverflow上阅读并应用了许多与此密切相关的帖子,但我却一无所获结果返回。当我单步执行代码时,尽管我可以看到参数字符串已正确识别并正确传递,但实际的Android Room代码似乎并未将变量字符串绑定到语句,这不是我编写的代码,或者至少我从没有看到带有变量数据的结果绑定字符串,我仅看到以下内容:
从评论中选择CommentID在哪里评论喜欢?
我的目标是:这实际上是创建查询以处理类似于此的多个LIKE查询的第一步,我认为这需要@RawQuery设置。现在,我无法简单地工作。
@Query包装器中会发生什么:我意识到我在这里可能是天真和错误的,但是在下面我可以看到参数和语句都被传递了,但是看起来好像“_statement.bindString”实际上是绑定了“:值”(“真相”)返回该语句,并返回0个结果。
最佳答案
这是Android Room开发团队提供的解决方案:
@Query("SELECT CommentID FROM Comments WHERE Comment LIKE '%' || :value || '%'")
List<Integer> customSearchCommentsTable(String value);
具有讽刺意味的是,开发团队无法使其发布的代码示例正常工作。在他们做出回应时,我已经使用@RawQuery方法创建了一种解决方法,以创建正确的SQL语法。