Ответ 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();
}
Это немного сложно, но вам обязательно нужно заглянуть за долину, чтобы добраться до этого объекта, который скрыт в классах абстракции базы данных.