【发布时间】:2017-11-01 10:01:19
【问题描述】:
问题
是否可以在运行时构造查询?
用例
@Query("SELECT * FROM playlist " +
"WHERE playlist_title LIKE '% :playlistTitle %' " +
"GROUP BY playlist_title " +
"ORDER BY playlist_title " +
"LIMIT :limit")
List<IPlaylist> searchPlaylists(String playlistTitle, int limit);
limit 部分是可选的。也就是说,它应该能够在有限制或无限制的情况下执行相同的查询。
更复杂的用例
在前一种情况下,可以进行两个带限制部分和不带限制部分的静态查询,并且每次都可以使用适当的一个。但有时我们可能不得不处理更复杂的情况,例如构建过滤器。
在这种情况下,与前面的示例不同,将有多个可选部分。对于一个图书表,我们可能需要根据图书所属的类别、作者姓名、价格区间、出版日期等进行过滤。几乎不可能对这些部分的所有组合进行静态查询。
【问题讨论】:
-
“可选参数”是什么意思?暂时忽略 Room,您将如何使用传统的 Android SQLite API 实现可选参数?
-
@CommonsWare 我的意思是我想动态设置或不设置查询的限制参数。
-
好的。暂时忽略 Room,你将如何使用
SQLiteDatabase来实现它?如果答案是“我会有两个不同的查询字符串”,那么为什么不使用两个不同的@Query注释呢?由于注释可以引用static字段(AFAIK),原则上,您甚至可以通过定义一次查询字符串的核心部分并从每个注释中引用它来减少冗余。 -
我理解你,我正在重构,因为房间很新,我正在尝试看看是否有更好的方法来做到这一点,否则我将创建两种方法.
标签: android android-room