34 votes

Curseur Android avec ORMLite à utiliser dans CursorAdapter

Existe-t-il un moyen d'obtenir un curseur pour une requête que je traite avec un objet ORMLite Dao?

65voto

Gray Points 58585

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.

0voto

Vince Points 1

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?

0voto

Simon.Ponder Points 336

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.

0voto

jklp Points 839

Si vous êtes dans une activité et que vous ne voulez pas perdre votre temps avec QueryBuilder, essayez ce qui suit, ce qui est tout aussi efficace.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X