2015-04-06 3 views
0

J'ai déjà une configuration de base de données SQLite que j'utilise comme cache pour l'application Android. L'application fait une requête HTTP et récupère une liste d'objets que je peux insérer dans la base de données. Après la première demande, si je faire de plus les demandes, comment faire tout ce qui suit dans une meilleure façon:Insérer, mettre à jour et supprimer à partir d'une base de données SQLite (Android)

1) insérer tous les nouveaux objets de la liste
2) mettre à jour tous les objets qui étaient déjà dans la base de
3) supprimer toutes les lignes qui n'étaient pas présentes dans la dernière liste d'objets.

Je sais que les options 1 et 2 peut être fait en utilisant la requête « INSERT ou UPDATE ». Comment puis-je gérer la 3ème option efficacement?

En ce moment, mon approche est de supprimer tous de la table puis insérez tous. Mais ce n'est pas très efficace. Des idées pour l'améliorer?

Répondre

0

Pour cela, vous pouvez utiliser les IDs des lignes. Pour ce faire, récupérez d'abord toutes les lignes que vous voulez supprimer à l'aide de la requête SELECT et ajoutez-en une liste temporaire, puis utilisez pour la boucle sur l'arraylist pour supprimer toutes ces lignes en utilisant DELETE query.

0

Vous devez faire vos opérations en utilisant la méthode applyBatch() du ContentProvider (http://developer.android.com/reference/android/content/ContentProvider.html#applyBatch(java.util.ArrayList)).

Vous pouvez effectuer cette méthode dans un thread séparé de façon asynchrone, que vous ne bloquez rien d'autre. Vous devrez créer une liste de ContentProviderOperations. En fait, vous n'avez qu'à spécifier ceux que vous devez insérer ou mettre à jour dans ArrayList et implémenter la méthode applyBatch() de manière à supprimer automatiquement les autres entrées de la base de données.

Pour répondre à votre question sur la façon de supprimer les entrées ne figurant pas dans le tableau, l'hypothèse logique serait de parcourir vos données de manière séquentielle, puis supprimer celles qui n'ont pas besoin d'exister.

0

Je suppose que l'intention est de rafraîchir l'ensemble des résultats de la demande de Http enregistré dans la base de données. Donc, je pense que le moyen le plus efficace est de faire une transaction ou une opération par lots pour supprimer toutes les lignes de la table d'abord, puis insérer les nouvelles lignes. Une transaction peut être meilleure afin que les lignes de résultat soient toutes nouvelles ou toutes anciennes, mais pas mixtes.