2013-03-27 84 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