2013-03-27 561 views
0

我有三个表,我必须在一个Android ListView目前。为了获取数据,我使用SQL UNION运算符将所有三个表“合并”在一起,这样在我的ViewBinder中,我可以使每个时间轴项目看起来不同。ORMLite联盟运营商

这些项目需要按时间顺序排序。这三个表格没有共同的基类。

这里是我心目中的SQL:

我怎样才能表达ORMLite上面的查询?

我知道我可以使用Dao.executeRaw,但我不想一次性填充整个列表。我宁愿使用ORMLite中的trick to get the underlying cursor,然后将其传递给我的适配器。 (延迟加载,使长列表的初始显示更快。)

有没有办法像Dao.getPreparedQueryFromRaw(String statement)这样?还是更好呢QueryBuilder.union(QueryBuilder qb)

+0

“我不想一次性填充我的整个列表[...]懒惰加载”我不确定你可以轻松实现这一点。如果您使用ListView和CursorAdapter,则会查询整个列表。没有分页/限制。 ListView的回收材料纯粹是基于视图,而不是基础数据。 – Simon 2015-01-26 12:57:00

回答

1

有没有办法像Dao.getPreparedQueryFromRaw(String statement)?还是更好的QueryBuilder.union(QueryBuilder qb)?

使用ORMLite完成此操作的最佳方法是使用queryRaw(...) methods之一。他们返回一个可以迭代的GenericRawResults class。迭代器会给你一个number of different methods来帮助你在列表中移动。

问题是通用结果不是某种类型,所以我不确定您是否可以将它映射到Android ListView。您可以提供RawRowMapperqueryRaw(...)。您可以使用dao.getRawRowMapper() method获取特定类型的映射器。

希望在这里有所帮助。

+0

我会看看它是否可以创建一个包含'RawRowMapper'的Cursor,以使它与ListView一起工作。 – Diederik 2013-03-28 07:23:44

2

您可以通过调用SQLiteDatabase上的rawQuery来获得游标。我做这样的事情:

final SQLiteDatabase db = getHelper().getReadableDatabase(); 

Cursor cursor = db.rawQuery(MY_SQL_QUERY, null); 

你不需要做任何更多的事情。

+0

这会工作,是的,但我更喜欢以ORMLite为中心的解决方案。我们的代码中没有其他地方使用原始SQL,因此将它放在这里将会是令人讨厌的。 – Diederik 2013-03-27 09:05:25