8 votes

Effectuer des insertions SQLite efficaces avec Android

J'ai une activité qui gère les imprimantes de mon université. Les imprimantes peuvent être téléchargées sur Internet et sont ensuite stockées dans une base de données SQLite. Le problème est qu'il y a environ 500 entrées de base de données qui doivent être faites pour les stocker, ce qui, avec mon code, prend beaucoup de temps (environ 30s sur un Google Nexus S). Mon code pour le faire est le suivant :

printerDB = new PrinterListOpenHelper(this);
SQLiteDatabase db = printerDB.getWritableDatabase();
db.execSQL("INSERT INTO destination (id, destination) VALUES(1,'BSAC240');");
db.execSQL("INSERT INTO destination (id, destination) VALUES(2,'BSAD152');");
...

Elle est suivie d'environ 500 rangées similaires. J'ai également essayé de le faire avec un seul

db.rawQuerry("INSERT INTO destination (id, destination) VALUES(1,'BSAC240');
INSERT INTO destination (id, destination) VALUES(2,'BSAD152');.......");

mais alors seule la première instruction INSERT est réellement exécutée.

Quelqu'un connaît-il une astuce pour rendre cela efficace ? Ou les bases de données Android sont-elles vraiment si lentes ?

Merci beaucoup pour votre aide ! Simon

17voto

vickirk Points 2315

Cela fonctionne-t-il mieux si vous les mettez dans une transaction ?

BEGIN TRANSACTION
  INSERT INTO destination (id, destination) VALUES(1,'BSAC240');
  INSERT INTO destination (id, destination) VALUES(2,'BSAD152');
END TRANSACTION

Ou encore (mise à jour suite aux commentaires)

db.beginTransaction()
try {
    db.execSQL("INSERT INTO destination (id, destination) VALUES(1,'BSAC240');");
    db.execSQL("INSERT INTO destination (id, destination) VALUES(2,'BSAD152');");
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}

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