Exemple de champ d'incrément automatique de Realm

je dois ajouter auto increment champ clé dans Realm base de données dans android. comment puis-je faire cela? Est-ce possible?

Merci d'avance.

7
demandé sur N J 2015-07-05 13:07:52

2 réponses

Relam ne supporte pas actuellement l'augmentation automatique

voir ce numéro sur GitHub

, vous pouvez prendre de travailler comme ça

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
         // increment index
         Number num = realm.where(dbObj.class).max("id");
         int nextID;
         if(num == null) {
            nextID = 1;
         } else {
            nextID = num.intValue() + 1;
         }
         dbObj obj = realm.createObject(dbObj.class, nextID);
         // ...
    }
}
9
répondu N J 2016-10-21 11:25:16

la liaison Java ne supporte pas encore les clés primaires, mais c'est sur la feuille de route et avec une haute priorité - voir: https://groups.google.com/forum/#!topic / realm-java /6hFqdyoH67w . Comme solution de contournement, vous pouvez utiliser ce morceau de code pour générer des clés:

int key;
try {
  key = realm.where(Child_pages.class).max("id").intValue() + 1;
} catch(ArrayIndexOutOfBoundsException ex) {
 key = 0; // when there is no object in the database yet
}

j'utilise singleton, factory pour la génération de clés primaires comme une solution générique avec de meilleures performances (pas besoin de requête pour max("id") à chaque fois).

il y a une longue discussion dans Realm Git Hub si vous avez besoin de plus de contexte: Document Comment définir un ID d'incrément automatique?

1
répondu zacheusz 2016-03-17 20:19:02