Курсор Android с ORMLite для использования в CursorAdapter - PullRequest
34 голосов
/ 23 августа 2011

Есть ли способ, как получить курсор для запроса, который я обрабатываю с помощью объекта ORMLite Dao?

Ответы [ 4 ]

64 голосов
/ 23 августа 2011

ORMLite теперь поддерживает методы next(), previous(), moveRelative(offset), ... для CloseableIterator класса .Это должно позволить вам перемещать базовый Cursor объект по желанию.

Он также поддерживает следующие методы курсора DAO:

  • dao.mapSelectStarRow(databaseResults) Returnпоследняя строка из базы данных является результатом запроса к select *.При этом вы можете изменить местоположение курсора (например) и затем получить текущий объект.
  • dao.getSelectStarRowMapper() Предоставляет картограф, который можно использовать для сопоставления объекта за пределами Дао.

Когда вы создаете собственный запрос с помощью ORMLite , вы используете объект QueryBuilder.queryBuilder.prepare() возвращает PreparedQuery, который используется различными методами в DAO.Вы можете позвонить dao.iterator(preparedQuery), который вернет CloseableIterator, который используется для перебора результатов.Существует iterator.getRawResults() для доступа к классу DatabaseResults.Под Android это может быть приведено к AndroidDatabaseResults, у которого есть метод getCursor() для возврата 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();
}

Это немного сложно, но вам определенно приходится заглядывать за вейл, чтобы добраться до этого объекта, который скрыт классами абстракции базы данных.

0 голосов
/ 22 июня 2013

Если вы в Деятельности и не хотите возиться с QueryBuilder, попробуйте следующее, что также эффективно.

Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)
0 голосов
/ 19 октября 2012

Вы попробовали какой-нибудь совет Грея из этой записи?Он объясняет, как вы можете выбрать столбец в качестве другого имени, например, выбрать id как _id.

0 голосов
/ 23 августа 2011

Если вы имеете в виду метод getHelper() для достижения создания методов dao и т. Д., Вам нужно только наследовать от OrmLiteBaseActivity<YourDBHelper>, и вы можете вызвать его.Это будет выглядеть так:

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

Если вы имеете в виду курсор для обработки базы данных: я не думаю, что вы можете достичь этого!Но я не понимаю, зачем тебе это нужно.ORMLite имеет почти все функции курсора.Так зачем тебе это?

...