2010-11-26 6 views

Antwort

26

Im Grunde ist es in Ordnung, aber da Sie nicht Code zur Verfügung gestellt hat, kann ich nur 2 Möglichkeiten Post für sie

Erstens:

// In your content provider 
public Uri insert(...) { 
    long insertId = db.insert(...); 

    if(insertId == -1) { 
     // insert failed, do update 
     db.update(...); 
    } 
} 

Zweitens:

public Uri insert(...) { 
    long insertId = db.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_REPLACE) 

    if(insertId == -1) { 
     // insert and update/replace failed 
    } 
} 

Check out SQLiteDatabase als Referenz für den vierten Parameter. In den meisten Fällen sollte die letzte Methode ausreichen, es sei denn, Sie möchten nur bestimmte Felder aktualisieren, wenn die Zeile vorhanden ist, und alle Felder haben, wenn dies nicht der Fall ist.

Am nützlichsten für insertWithOnConflict möglicherweise sein, dass Sie eine Zeile einfügen können und wenn es bereits vorhanden ist, ignorieren Sie die Einfügung und stattdessen den URI/Primärschlüssel der bereits vorhandenen Zeile.

5

Es ist Ihre Wahl, was Sie in Ihren überschriebenen Methoden schreiben. Also ja, es ist in Ordnung.

Ich weiß nicht, was Sie versuchen zu tun, aber Sie könnten auch auf die SQLiteDatabase 's replace() Methode zu sehen. Vielleicht passt es besser zu Ihren Bedürfnissen.

+0

ok mein Problem ist, dass ich überprüfen muss, ob eine Zeile existiert, die einen bestimmten Wert in Spalte A (A ist nicht der eindeutige Schlüssel) hat. Wenn ja, muss ich diese Zeile aktualisieren. – Mak

+0

Wenn sonst muss ich eine neue Zeile erstellen .... Was ist der beste Weg, das zu tun – Mak

+1

Sie haben 2 Möglichkeiten, das zu tun: 1. ersetzen (wenn die Zeile nicht existiert, fügt es es ein; wenn es existiert, es löscht es und fügt das neue ein); 2. versuche die Zeile einzufügen ... falls nicht erfolgreich (dh die Zeile existiert bereits), aktualisiere sie. Wenn Sie also etwas aus der alten Zeile benötigen (z. B. einen bestimmten Spaltenwert), verwenden Sie insert + update. Wenn nicht, benutze replace (du verlierst alle Daten aus der alten Zeile). – Edi

Verwandte Themen