Existe-t-il un moyen d'obtenir un curseur pour une requête que je traite avec un objet ORMLite Dao?
Réponses
Trop de publicités?ORMLite prend désormais en charge next()
, previous()
, moveRelative(offset)
, ... des méthodes sur l' CloseableIterator
classe. Cela devrait vous permettre de déplacer le sous-jacent Cursor
objet déplacer à volonté.
Il prend également en charge les DAO Curseur méthodes:
-
dao.mapSelectStarRow(databaseResults)
De retour de la dernière ligne de la base de données de résultats d'une requête à l'select *
. Avec cela, vous pouvez modifier l'emplacement du curseur (par exemple), puis obtenir l'objet en cours. -
dao.getSelectStarRowMapper()
Fournit un mappeur que vous pouvez utiliser pour cartographier l'objet en dehors de la Dao.
Lorsque vous construisez votre propre requête avec ORMLite, vous utilisez l' QueryBuilder
objet. queryBuilder.prepare()
renvoie un PreparedQuery
qui est utilisé par diverses méthodes dans le DAO. Vous pouvez appeler dao.iterator(preparedQuery)
qui sera de retour une CloseableIterator
qui est utilisé pour itérer sur les résultats. Il y a un iterator.getRawResults()
pour obtenir l'accès à l' DatabaseResults
classe. Sous Android, cela peut être converti en une AndroidDatabaseResults
qui a getCursor()
méthode sur le retour d'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 certainement avoir à peer derrière la vallée pour arriver à cet objet qui est masqué par la base de données des classes d'abstraction.
Si vous voulez parler de la méthode getHelper()
pour atteindre les méthodes de création, etc., vous devez simplement hériter du OrmLiteBaseActivity<YourDBHelper>
et vous pouvez l’appeler. Cela ressemblera à ça:
public class YourClass extends OrmLiteBaseActivity<YourDBHelper> {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
getHelper().getDao().queryForAll();
...
}
}
Si vous voulez parler du curseur pour gérer le fonctionnement de la base de données: je ne pense pas que vous puissiez l'atteindre! Mais je ne comprends pas pourquoi vous devriez en avoir besoin. ORMLite a presque toutes les fonctions du curseur. Alors, pourquoi en avez-vous besoin?
Avez-vous essayé certains des conseils de Gray de ce post? Il explique comment vous pouvez sélectionner une colonne sous un autre nom, par exemple, sélectionnez id en tant que _id.