Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Если вы находитесь в Управлении и не хотите вмешиваться в QueryBuilder, выполните следующие действия: это так же эффективно.

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