Insérer plusieurs lignes avec ContentProvider
J'ai besoin de faire insérer quelques lignes dans une seule transaction. Puis-je le faire avec ContentProvider?
source d'informationauteur earsonheart
Vous devez vous connecter pour publier un commentaire.
Sur le côté client,
ContentResolver
prend en charge unbulkInsert()
méthode. Ceux qui ne seront pas nécessairement être traitées en une seule transaction par leContentProvider
tout simplement parce qu'il y a peut-être pas toutes les transactions effectuées par leContentProvider
.J'ai mis en œuvre ce dans mon application, et en voici l'essentiel à savoir le code que j'utilise.
À mon fournisseur de contenu, j'ai annulé la applyBatch() la méthode et c'est une méthode très simple pour remplacer:
Le résultat est donné à la prochaine opération parce que vous voulez le soutien de retour de références. Lorsque je veux changer des trucs dans la base de données dans cette transaction unique, je boucle sur mon contenu et de faire des trucs comme ça:
Vous avez juste besoin de se rappeler pour terminer en appelant le:
Cela permettra d'effectuer vos trucs dans une transaction unique et prend en charge des références arrières si vous avez besoin de l'id à partir d'une version antérieure insérer sans problème.
Ici un exemple pour bulkInsert:
Et dans votre code quelque chose comme:
J'utilise également le mode de remplacement pour insérer une ligne -
db.insertWithOnConflict(EVENT_TABLE_NAME, null, la valeur, la SQLiteDatabase.CONFLICT_REPLACE);
Sa va débarrasser de conflit si l'enregistrement est existent déjà
Dans DatabaseHelper ajouter un INDEX UNIQUE
Et appel bulkInsert comme ceci: