ORMLite Daoオブジェクトで処理しているクエリのカーソルを取得する方法はありますか?
4 に答える
ORMLitenext()
は、クラスのメソッドをサポートするようprevious()
になりました。これにより、基になるオブジェクトを自由に移動できるようになります。moveRelative(offset)
CloseableIterator
Cursor
また、次の DAO Cursor メソッドもサポートしています。
dao.mapSelectStarRow(databaseResults)
へのクエリのデータベース結果から最新の行を返しますselect *
。これにより、カーソルの位置を変更して (たとえば)、現在のオブジェクトを取得できます。dao.getSelectStarRowMapper()
オブジェクトを Dao の外部にマップするために使用できるマッパーを提供します。
ORMLiteを使用して独自のクエリを作成する場合は、オブジェクトを使用しQueryBuilder
ます。 DAO のさまざまなメソッドで使用される をqueryBuilder.prepare()
返します。結果を反復するために使用される を返す which をPreparedQuery
呼び出すことができます。クラスにアクセスするための があります。Android では、これをAndroid を返すメソッドを持つにキャストできます。dao.iterator(preparedQuery)
CloseableIterator
iterator.getRawResults()
DatabaseResults
AndroidDatabaseResults
getCursor()
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();
}
これは少し複雑ですが、データベース抽象化クラスによって隠されているこのオブジェクトに到達するには、間違いなくvale の背後を覗き込む必要があります。
daoメソッドcreateなどに到達するメソッドを意味する場合は、getHelper()
から継承するだけで、OrmLiteBaseActivity<YourDBHelper>
それを呼び出すことができます。次のようになります。
public class YourClass extends OrmLiteBaseActivity<YourDBHelper> {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getHelper().getDao().queryForAll();
...
}
}
データベース操作を処理するためのカーソルを意味する場合:私はあなたがそれに到達できるとは思わない!しかし、なぜあなたがそれを必要とするのか分かりません。ORMLiteには、カーソルのほぼすべての機能があります。それで、あなたはそれを何のために必要としますか?
この投稿にあるグレイのアドバイスを試してみましたか? 彼は、select id as _id のように、列を別の名前で選択する方法を説明しています。