Est-il correct d'appeler la méthode de mise à jour SQLiteDatabase
dans la méthode surchargée insert()
d'un fournisseur de contenu?Android Contentprovider - mise à jour dans une méthode d'insertion
Répondre
Fondamentalement, il est très bien, mais puisque vous ne l'avez pas fourni le code, je ne peux pas poster 2 façons possibles pour elle
Première:
// In your content provider
public Uri insert(...) {
long insertId = db.insert(...);
if(insertId == -1) {
// insert failed, do update
db.update(...);
}
}
Deuxième:
public Uri insert(...) {
long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE)
if(insertId == -1) {
// insert and update/replace failed
}
}
Check out SQLiteDatabase pour référence sur le quatrième paramètre. Dans la plupart des cas, la dernière méthode devrait suffire, à moins que vous ne vouliez que certains champs mis à jour si la ligne existe et que tous les champs le soient.
Le besoin le plus utile pour insertWithOnConflict peut être, que vous pourriez insérer une ligne et si elle existe déjà, ignorer l'insertion et à la place retourner la clé Uri/primaire de la ligne déjà existante.
C'est votre choix de ce que vous écrivez dans vos méthodes substituées. Alors oui, ça va. Je ne sais pas ce que vous essayez de faire, mais vous voudrez peut-être regarder la méthode SQLiteDatabase
replace()
aussi. Peut-être que cela correspond mieux à vos besoins.
ok mon problème est que j'ai besoin de vérifier s'il existe une ligne qui a une certaine valeur dans la colonne A (A n'est pas la clé unique). Si oui, j'ai besoin de mettre à jour cette ligne. – Mak
Si autre chose j'ai besoin de créer une nouvelle rangée .... Quelle est la meilleure façon de faire cela – Mak
Vous avez 2 façons de faire cela: 1. remplacer (si la ligne n'existe pas, il insère, s'il existe, il le supprime et insère le nouveau); 2. essayez d'insérer la ligne ... si elle n'est pas réussie (ce qui signifie que la ligne existe déjà), mettez-la à jour. Donc, si vous avez besoin de quelque chose de l'ancienne ligne (comme une certaine valeur de colonne), utilisez insert + update. Sinon, utilisez remplacer (vous perdrez toutes les données de l'ancienne ligne). – Edi