【发布时间】:2013-03-17 07:14:14
【问题描述】:
我必须在一个 Android ListView 中显示三个表。为了获取数据,我使用 SQL UNION 运算符将所有三个表“合并”在一起,这样在我的 ViewBinder 中,我可以使每个时间线项目看起来不同。
这些项目需要按时间顺序排序。这三个表没有共同的基类。
这是我想到的 SQL:
SELECT * FROM (
SELECT id, startTime as time, username, comment, "CustomerInteraction" FROM CustomerInteraction
UNION
SELECT id, date as time, "" as username, "" as comment, "Sale" FROM Sale
UNION
SELECT id, claimDate as time, username, comment, "TravelClaim" FROM TravelClaim)
ORDER BY time DESC LIMIT 100
如何在 ORMLite 中表达上述查询?
我知道我可以使用Dao.executeRaw,但我不想一次性填充我的整个列表。我更愿意使用 ORMLite 中的trick to get the underlying cursor,然后将其传递给我的适配器。 (延迟加载,使长列表的初始显示速度更快。)
有没有办法可以做类似Dao.getPreparedQueryFromRaw(String statement) 的事情?或者更好QueryBuilder.union(QueryBuilder qb)?
【问题讨论】:
-
“我不想一次性填充我的整个列表 [...] 延迟加载”我不确定您能否轻松实现这一目标。如果使用 ListView 和 CursorAdapter,则查询整个列表。没有分页/限制。 ListView 的回收东西纯粹是在视图上,而不是在底层数据上。