Curseur Android avec ORMLite à utiliser dans CursorAdapter
y a-t-il un moyen, comment obtenir le curseur pour une requête, que je traite avec l'objet ORMLite Dao?
4 réponses
ORMLite prend désormais en charge next()
, previous()
, moveRelative(offset)
, ... méthodes sur la CloseableIterator
classe . Cela devrait vous permettre de déplacer l'objet sous-jacent Cursor
à volonté.
il supporte également les méthodes suivantes de curseur DAO:
-
dao.mapSelectStarRow(databaseResults)
retourner la dernière ligne de la base de données résultats d'une requête àselect *
. Avec cela vous pouvez changer l'emplacement du curseur (par exemple) et ensuite obtenir l'objet courant. -
dao.getSelectStarRowMapper()
fournit un mapper que vous pouvez utiliser pour mapper l'objet en dehors du Dao.
lorsque vous construisez votre propre requête avec ORMLite , vous utilisez l'objet QueryBuilder
. queryBuilder.prepare()
renvoie un PreparedQuery
qui est utilisé par divers méthodes dans le DAO. Vous pouvez appeler dao.iterator(preparedQuery)
qui retournera un CloseableIterator
qui est utilisé pour itérer à travers les résultats. Il y a un iterator.getRawResults()
pour accéder à la classe DatabaseResults
. Sous Android, cela peut être moulé à un AndroidDatabaseResults
qui a une getCursor()
méthode sur elle pour retourner L'Android Cursor
.
quelque chose comme le code suivant:
// 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();
}
C'est un peu compliqué, mais vous êtes définitivement devant scruter derrière le vale pour arriver à cet objet qui est caché par les classes d'abstraction de base de données.
avez-vous essayé certains des conseils de Gray de ce "post 151920920"? Il explique comment vous pouvez sélectionner une colonne comme un autre nom, par exemple, select id _id.
si vous êtes dans une activité et ne voulez pas déconner avec le QueryBuilder donner le suivant un go, qui est tout aussi efficace.
Cursor cursor = getHelper().getReadableDatabase().query(tableName, projection, selection, selectionArgs, groupBy, having, sortOrder)
si vous voulez dire la méthode getHelper()
pour atteindre les méthodes dao créer etc. vous n'avez qu'à hériter de la OrmLiteBaseActivity<YourDBHelper>
et vous pouvez l'appeler. Il ressemblera à ceci:
public class YourClass extends OrmLiteBaseActivity<YourDBHelper> {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getHelper().getDao().queryForAll();
...
}
}
si vous voulez dire le curseur pour gérer le fonctionnement de la base de données: Je ne pense pas que vous pouvez l'atteindre! Mais je ne comprends pas pourquoi vous avez besoin pour elle. ORMLite a presque toutes les fonctions du curseur. Alors, de quoi avez-vous besoin?