【发布时间】:2020-02-14 13:27:51
【问题描述】:
我的问题:我不确定为什么这个 Android Room 查询没有返回结果。我以为我理解了正确的编码,而且看起来很简单。如果我使用 SQLiteStudio 将相同的查询直接传递到相同的数据库,我会得到结果。
调用代码(我硬编码字符串'truth'来测试它):
List<Integer> tableIDs = researchDatabase.getCommentsDao().customSearchCommentsTable("truth");
DAO 代码(包含在 CommentsDao 中):
@Query("SELECT CommentID FROM Comments WHERE Comment LIKE :value")
List<Integer> customSearchCommentsTable(String value);
我做了什么:我是 Android Room 的新手,但我一直在使用 Android 开发人员 (developer.android.com) 的所有示例和课程,并在此处查看和应用了许多帖子stackoverflow 密切相关,但我无法返回任何结果。当我单步执行代码时,实际的 Android Room 代码似乎没有将变量字符串绑定到语句,尽管我可以看到参数字符串被识别并正确传递,这不是我编写的代码,或者至少不是我从来没有看到带有我的变量数据的结果绑定字符串,我只看到这个:
SELECT CommentID FROM Comments WHERE Comment LIKE ?
我的目标是什么:这实际上是创建查询以处理与此类似的多个 LIKE 查询的第一步,我认为这需要 @RawQuery 设置。现在,我无法让简单的事情发挥作用。
@Query 包装器中发生的情况:我意识到我在这里可能是天真和错误的,但在下面我可以看到参数和语句都通过了,但看起来好像“_statement.bindString”实际上没有绑定":value" ('truth') 到语句并返回 0 个结果。
【问题讨论】:
-
仅供观众参考:2020 年 2 月 14 日在此问题上开票,随后在 2020 年 3 月 2 日转发给 Room development,作为可能的缺陷。解决此问题后,我将在此处发布任何更新。 (票务网址:issuetracker.google.com/149519050)
-
仅供观众参考:房间开发否认我提出的票证存在问题,并且本质上表示不应按字面意思理解所提供的示例。他们提供了一个应该使用的解决方案,其中涉及连接通配符。在我看来,99% 的官方 Android Room 开发代码都是按字面意思提供的,或者说提供它的目的是什么。关于他们的回应和我的看法,这仍然是他们拒绝在文档中或以编程方式纠正的错误。
-
习惯这种事情。 Google 对 Android 错误报告的处理只能被定性为非常无能。
标签: java android-sqlite android-room