是否可以在INRoom中使用SQLite的条件?
我正在尝试从我的数据库中选择一个项目列表,其中某列的值(在本例中为TEXT列)与一组过滤器值中的任何一个匹配.根据我的知识,这很容易在SQL和SQLite中完成,只需IN在SELECT语句中添加一个条件(参见此处).但是,我似乎无法使它与Room合作.
我一直收到这个错误:
Error:(70, 25) error: no viable alternative at input 'SELECT * FROM Table WHERE column IN :filterValues'
Run Code Online (Sandbox Code Playgroud)
(@Query调用DAO 注释方法的输入filterValues)
我现在尝试了三种不同的方法:
List<String>String[]String,但格式化为(value_1, value_2, ..., value_n)特别是最后一个应该可以很容易地工作,因为它将(或者至少应该)直接转换为SELECT * FROM Table WHERE column IN (value_1, value_2, ..., value_n),SELECT如果您只是直接访问数据库,这就是您手动写出的确切方式.
我在我正在开发的应用程序中有一个RecyclerView,我可以填充各种项目并搜索/过滤/排序等等.目前正致力于排序.
我有多个可以排序的标准,可以从下拉式微调器中选择.在数据对象中排序的值包括字符串,整数和枚举,所有这些都很容易排序.然而,虽然一些排序选项只需要一个标准,但有些标准需要二级或三级标准(在一些极少数情况下最多需要4个标准).为了有效地使用Collections.sort(List, Comparator),我必须编写相当多的自定义比较器,所以我希望可能有某种方法可以避免这种情况.
事实证明,Java 8有一个很好的解决方案:Comparator.comparing(...)它为您生成Comparators,并且可以通过无限期的方式轻松扩展Comparator.comparing().thenComparing().thenComparing()....它也有List myList.sort(),我不确定Collections.sort(myList)它的效率,但它对我来说感觉更干净.然后我调查了一下,想到了我的运气!Android已经支持许多Java 8功能了一段时间了!
不幸的是,Android Studio告诉我,出于某种原因,Comparator.comparing()以及List::sort仅支持API 24及更高版本.这对我来说实际上不起作用,因为我正在研究的应用程序"需要"运行低至API 15-16.然而,我发现这很奇怪,因为我尝试过的其他Java 8功能((o1, o2) -> (o1.toString().compareTo(o2.toString())像List::sort上面的lambda表达式和方法引用一样)在我检查的范围内的所有API级别上工作正常,只要您指定定位Java 8.毕竟它是Java 8的东西,而不是Android的东西.
因此,考虑到所有这些,有没有办法在API 24下制作Comparator.comparing()和List::sort工作?我在谷歌的搜索中没有找到任何东西,它们最终只是指向Android的Java 8"文档"或JavaDocs for Comparator和List.Android的支持库(似乎不太可能)或第三方库/像Retrolambda这样的东西?
android ×2
android-room ×1
comparator ×1
java ×1
java-8 ×1
select ×1
sorting ×1
sql-in ×1
sqlite ×1