Есть ли способ, как получить курсор для запроса, который я обрабатываю с помощью объекта ORMLite Dao?
Android-курсор с ORMLite для использования в CursorAdapter
Ответ 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)