2010-05-20 6 views
6

Comme nous le savons les développeurs Android, la méthode SQLiteDatabaseexecSQL peut exécuter une seule instruction.Exécution de requête SQL par lots efficace sur Android, pour la base de données de mise à niveau

Le doc dit:

exécuter une seule instruction SQL qui n'est pas une requête. Par exemple, CREATE TABLE, DELETE, INSERT, etc. Les instructions multiples séparées par ; ne sont pas prises en charge.

Je dois charger dans un lot d'enregistrements, 1000 et compter.
Comment les insérer efficacement?
Et quel est le moyen le plus simple de fournir ces instructions SQL avec votre apk? Je mentionne, il y a déjà une base de données système et je l'exécuterai sur l'événement onUpdate.

J'ai ce code à ce jour:

List<String[]> li = new ArrayList<String[]>(); 
     li.add(new String[] { 
       "-1", "Stop", "0" 
     }); 
     li.add(new String[] { 
       "0", "Start", "0" 
     }); 
    /* the rest of the assign */ 
try { 
     for (String[] elem : li) { 
      getDb().execSQL(
        "INSERT INTO " + TABLENAME + " (" + _ID + "," + NAME + "," + PARSE_ORDER 
          + ") VALUES (?,?,?)", elem); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Répondre

16

Comment puis-je insérer ces efficacement?

transaction Utilisation:

db.beginTransaction(); 
    try { 
     for(;;) { 
      db.execSQL(...); 
      } 
     db.setTransactionSuccessful(); 
    } finally { 
     db.endTransaction(); 
    } 
1

Je pense que ce que vous avez est la seule façon de charger les 1000 dossiers, maintenant, dans la mesure du déploiement que DB avec votre fichier APK, consultez cet article :

http://www.helloandroid.com/tutorials/how-have-default-database

+0

J'ai documenté au sujet de ce problème, et toutes les solutions sont basées exclusivement sur le fait que nous créons une nouvelle base de données. Mais j'ai besoin de cela lors de la mise à niveau, donc pour remplacer la base de données existante n'est pas bon, je dois garder les choses d'utilisateur là-bas. – Pentium10

+0

Il n'y a aucune raison de ne pas pouvoir utiliser deux bases de données: une base de données utilisateur et une base de données d'informations statiques. De cette façon, vous pouvez remplacer complètement la base de données statique lors de la mise à niveau tout en laissant les données utilisateur intactes. –

Questions connexes