sqlite RoomDB如何同时查询多个值

slmsl1lt  于 2023-01-13  发布在  SQLite
关注(0)|答案(1)|浏览(156)

我正在使用Android Studio Room数据库查询一些复杂的作品,我最初的SQLite查询语句是这样的:

SELECT DISTINCT mainCol as main, secondCol as sum FROM ADB WHERE 
(mainCol LIKE 'A1%' OR mainCol LIKE 'A2%' OR mainCol LIKE 'A3%') AND 
(secondCol LIKE 'B1%' OR secondCol LIKE 'B2%' OR secondCol LIKE 'B3%' )
ORDER BY dbtime DESC

RoomDAO建议使用List,因此我按如下方式执行此操作。
在DAO中

@Query  
("SELECT DISTINCT mainCol as main, secondCol as sum FROM ADB WHERE" +  
" mainCol LIKE :rOne AND" +  
" secondCol LIKE :rTwo" +  
" ORDER BY dbtime DESC") 
public Map<String,String> getCompare(List<String> rOne, List<String> rTwo);

但它响应了这样的错误
从ADB中选择不同的mainCol作为主列,选择不同的secondCol作为总和,其中mainCol Like?,?,?AND secondCol Like?,?,?ORDER BY dbtime DESC
当然这是个错误的句子。
有什么好的答案来解决我的问题吗?
谢谢
我试过用我原来的命令按房间查询,但没有结果。我只尝试了一个值为每个,有正确的结果,但只有一个结果。我想查询多个值和使用“或”,我在这里挣扎。

jpfvwuh4

jpfvwuh41#

如果你使用List,那么它只是将值转换成逗号分隔的值列表,然后转换成?,以便SQLite绑定这些值,因此?,?,?(* 适合在IN ()子句中使用 *)。在你的情况下,你希望在整个SQL中放置单独的值。因此类似于:-

@Query("SELECT DISTINCT mainCol as main, secondCol as sum FROM ADB WHERE 
(mainCol LIKE :rOneA OR mainCol LIKE :rOneB OR mainCol LIKE :rOneC) AND 
(secondCol LIKE :rTwoA OR secondCol LIKE :rTwoB OR secondCol LIKE :rTwoC )
ORDER BY dbtime DESC")
public Map<String,String> getCompare(String rOneA, String rOneB, String rOneC, String rTwoA, String rTwoB, String rTwoC);
  • 请注意,以上是原则上的代码,它尚未编译或运行,因此可能包含一些键入错误。

相关问题