Курсор Android с ORMLite для использования в CursorAdapter

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

4 ответа

Решение

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

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

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

Когда вы создаете свой собственный запрос с ORMLite, вы используете QueryBuilder объект. queryBuilder.prepare() возвращает PreparedQuery который используется различными методами в DAO. Ты можешь позвонить dao.iterator(preparedQuery) который вернет CloseableIterator который используется для перебора результатов. E сть 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();
}

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

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

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

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

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

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

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

Другие вопросы по тегам