2010-11-26 5 views

Répondre

26

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.

5

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 SQLiteDatabasereplace() aussi. Peut-être que cela correspond mieux à vos besoins.

+0

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

+0

Si autre chose j'ai besoin de créer une nouvelle rangée .... Quelle est la meilleure façon de faire cela – Mak

+1

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

Questions connexes