ORMLite Daoオブジェクトで処理しているクエリのCursorを取得する方法はありますか?
ORMLite が CloseableIterator
のnext()
、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には、カーソルのほぼすべての機能があります。それで、何のためにそれが必要ですか?
this 投稿からグレイのアドバイスをいくつか試しましたか?彼は、select idを_idのように、列を別の名前として選択する方法を説明しています。
アクティビティを使用していて、QueryBuilderをいじりたくない場合は、次の手順を実行してください。
Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)