web-dev-qa-db-ja.com

Android CursorAdapterで使用するORMLiteを使用したカーソル

ORMLite Daoオブジェクトで処理しているクエリのCursorを取得する方法はありますか?

34
sealskej

ORMLiteCloseableIteratornext()previous()moveRelative(offset)、...メソッドをサポートするようになりましたクラス 。これにより、基になるCursorオブジェクトを自由に移動できます。

また、次のDAOカーソルメソッドもサポートしています。

  • dao.mapSelectStarRow(databaseResults) クエリのデータベース結果から最新の行を_select *_に返します。これにより、たとえばカーソルの位置を変更して、現在のオブジェクトを取得できます。
  • dao.getSelectStarRowMapper() Dao外のオブジェクトをマップするために使用できるマッパーを提供します。

ORMLite を使用して独自のクエリを作成する場合は、QueryBuilderオブジェクトを使用します。 queryBuilder.prepare()は、DAOのさまざまなメソッドで使用されるPreparedQueryを返します。結果を反復処理するために使用されるCloseableIteratorを返すdao.iterator(preparedQuery)を呼び出すことができます。 DatabaseResultsクラスにアクセスするためのiterator.getRawResults()があります。 Androidでは、これをgetCursor()メソッドを持つAndroidDatabaseResultsにキャストして、Android Cursorを返すことができます。

次のコードのようなもの:

_// build your query
QueryBuilder<Foo, String> qb = fooDao.queryBuilder();
qb.where()...;
// when you are done, prepare your query and build an iterator
CloseableIterator<Foo> iterator = dao.iterator(qb.prepare());
try {
   // get the raw results which can be cast under Android
   AndroidDatabaseResults results =
       (AndroidDatabaseResults)iterator.getRawResults();
   Cursor cursor = results.getRawCursor();
   ...
} finally {
   iterator.closeQuietly();
}
_

これは少し複雑ですが、データベース抽象化クラスによって隠されているこのオブジェクトに到達するために、間違いなく谷の後ろを覗き見する必要があります。

getHelper()メソッドがdaoメソッドの作成などに到達することを意味する場合は、OrmLiteBaseActivity<YourDBHelper>から継承するだけで、それを呼び出すことができます。次のようになります。

public class YourClass extends OrmLiteBaseActivity<YourDBHelper> {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
     ...
     getHelper().getDao().queryForAll();
     ...
  }
}

カーソルがデータベース操作を処理することを意味する場合:私はそれに到達できないと思います!しかし、なぜそれが必要なのか理解できません。 ORMLiteには、カーソルのほぼすべての機能があります。それで、何のためにそれが必要ですか?

0
Vince

this 投稿からグレイのアドバイスをいくつか試しましたか?彼は、select idを_idのように、列を別の名前として選択する方法を説明しています。

0
Simon.Ponder

アクティビティを使用していて、QueryBuilderをいじりたくない場合は、次の手順を実行してください。

Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)
0
jklp