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?

34
demandé sur Gray 2011-08-23 14:44:54

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.

64
répondu Gray 2013-11-18 22:44:16

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)
0
répondu jklp 2013-06-22 12:32:42

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?

0
répondu Vince 2013-07-16 03:24:54