0

1つのAndroidに表示する必要のあるテーブルが3つありますListView。データを取得するには、SQLUNION演算子を使用して、3つのテーブルすべてを「マージ」し、ViewBinderで各タイムラインアイテムを区別できるようにします。

これらのアイテムは時系列で並べ替える必要があります。これらの3つのテーブルには、共通の基本クラスがありません。

これが私が念頭に置いている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から基になるカーソルを取得し、それをアダプタに渡します。(遅延読み込みにより、長いリストの初期表示がはるかに高速になります。)

私が何かをすることができる方法はありDao.getPreparedQueryFromRaw(String statement)ますか?それとももっといいQueryBuilder.union(QueryBuilder qb)ですか?

4

2 に答える 2

2

SQLiteDatabaseでrawQueryを呼び出すことにより、カーソルを取得できます。私はこのようなことをします:

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

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

それ以上のことをする必要はありません。

于 2013-03-27T08:58:56.353 に答える
1

Dao.getPreparedQueryFromRaw(Stringステートメント)のようなことを行う方法はありますか?それとも、QueryBuilder.union(QueryBuilder qb)?

ORMLiteでこれを行う最良の方法は、いずれかのqueryRaw(...)方法を使用することです。GenericRawResultsそれらは、反復できるクラスを返します。イテレータは、リスト内を移動するのに役立つさまざまな方法を提供します。

問題は、一般的な結果が特定のタイプではないため、AndroidにマップできるかどうかわからないことですListViewRawRowMapperをに提供できますqueryRaw(...)dao.getRawRowMapper()メソッドを使用して、特定のタイプのマッパーを取得できます。

ここで何かお役に立てば幸いです。

于 2013-03-27T13:25:02.150 に答える