34

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

4

4 に答える 4

65

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

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

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

ORMLiteを使用して独自のクエリを作成する場合は、オブジェクトを使用しQueryBuilderます。 DAO のさまざまなメソッドで使用される をqueryBuilder.prepare()返します。結果を反復するために使用される を返す which をPreparedQuery呼び出すことができます。クラスにアクセスするための があります。Android では、これをAndroid を返すメソッドを持つにキャストできます。dao.iterator(preparedQuery)CloseableIteratoriterator.getRawResults()DatabaseResultsAndroidDatabaseResultsgetCursor()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 の背後を覗き込む必要があります。

于 2011-08-23T12:41:41.307 に答える
0

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

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

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

于 2011-08-23T11:15:19.810 に答える
0

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

于 2012-10-19T11:06:05.260 に答える