2017-07-01 3 views
0

J'ai une base de données dans mon application Android qui doit contenir des données prédéfinies lorsque l'application est installée. Pour ce faire, je suis en train de faire "Bulk Insert" en utilisant le sucre ORM. Il semble que l'exemple de code dans SugarORM docs a quelques erreurs à la fois dans la syntaxe et la mise en œuvre ou il n'est pas complet! Est-ce que quelqu'un sait la manière pratique d'insérer des données en masse?Insertion en bloc avec le sucre ORM ne fonctionne pas

Code Doc:

List<Book> books = new ArrayList<>(); 
books.add(new Book("isbn123", "Title here", "2nd edition")) 
books.add(new Book("isbn456", "Title here 2", "3nd edition")) 
books.add(new Book("isbn789", "Title here 3", "4nd edition")) 
SugarRecord.saveInTx(books); 

Il semble qu'il n'y ait pas saveInTx en classe SugarRecord!

Mon code:

import com.orm.SugarRecord; 
import com.orm.dsl.Table; 
import com.orm.dsl.Unique; 

import java.util.ArrayList; 
import java.util.List; 


@Table() 
public class Foods extends SugarRecord{ 
    @Unique 
    private String foodName; 
    private String calorie; 

    public Foods(String foodName, String calorie) { 
     this.foodName = foodName; 
     this.calorie = calorie; 
    } 

    public void putData(){ 
    List<Foods> foods = new ArrayList<>(); 
    foods.add(new Foods("Lamb Chops", "12")); 
    foods.add(new Foods("Onion", "32")); 
    foods.add(new Foods("Apple", "43")); 
    SugarRecord.saveInTx(foods);  
} 
} 
+0

Avez-vous essayé cela si oui, postez votre code aussi? –

+0

Ajouté juste. Veuillez revérifier –

Répondre

1

Vous ne pouvez pas dire comme Il semble qu'il n'y ait pas saveInTx en classe SugarRecord!, il y a des méthodes qui fonctionnent dans SugarRecord classe à savoir

@SuppressWarnings("deprecation") 
    public static <T> void saveInTx(Collection<T> objects) { 
     SQLiteDatabase sqLiteDatabase = getSugarContext().getSugarDb().getDB(); 
     try { 
      sqLiteDatabase.beginTransaction(); 
      sqLiteDatabase.setLockingEnabled(false); 
      for (T object: objects) { 
       save(object); 
      } 
      sqLiteDatabase.setTransactionSuccessful(); 
     } catch (Exception e) { 
      Log.i("Sugar", "Error in saving in transaction " + e.getMessage()); 
     } finally { 
      sqLiteDatabase.endTransaction(); 
      sqLiteDatabase.setLockingEnabled(true); 
     } 
    } 

Je l'ai essayé, il fonctionne très bien. Just Filtrer votre Logcat avec le mot-clé "sucre" tout en enregistrant l'enregistrement. Vous trouverez quelque chose comme I/Sugar: Foods saved : 1 Vous pouvez également voir le nombre que vous avez ajouté dans le tableau avec:

long foodCount= SugarRecord.count(Foods.class); 
    Log.i("Foods", "Foods " + foodCount); 

Donc, si vous ne recevez pas de données via SugarRecord.listAll(oods.class),

Ainsi, le seul problème est vous manquez juste un constructeur vide à la classe de modèle

essayez d'ajouter un constructeur vide et réessayez. effacez aussi vos données précédentes.

Espérons que cela aidera !!!

+0

Merci! bien sûr ça a aidé :) –