Ist es in Ordnung, die SQLiteDatabase
Update-Methode in der insert()
überschrieben Methode eines Content-Providers aufzurufen?Android Contentprovider - Update innerhalb einer Einfügemethode
Antwort
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.
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.
- 1. Android ContentProvider mit Diensten
- 2. Android ContentProvider Leistung
- 3. Android - Abfragen des SMS ContentProvider?
- 4. android: syncable = true für einen ContentProvider?
- 5. Erstellen und mit Contentprovider für Android
- 6. Android ContentProvider Datenbank Abfrage mehrere Tabellen
- 7. Datenfluss zwischen Android BroadcastReceiver, ContentProvider und Aktivität?
- 8. Android ContentProvider getType() aufgerufen, wenn und warum
- 9. Android ContentProvider Auswahlparameter der Löschmethode gleich 1
- 10. SELECT innerhalb einer UPDATE-Abfrage mit
- 11. Robolectric ContentProvider testing
- 12. Binary Tree Einfügemethode verursacht Stapelüberlauf
- 13. Update $ Scope innerhalb. Dann?
- 14. Update-Label innerhalb UpdatePanel
- 15. -Update innerhalb CASE (MySQL)
- 16. android Shape innerhalb einer Form
- 17. Wie verwende ich einen ContentProvider mit DiskLruCache in Android
- 18. Custom ContentProvider - openInputStream(), openOutputStream()
- 19. SyncAdapter ohne ContentProvider
- 20. Update-Figur innerhalb der Schleife
- 21. wie manSystemService in einem ContentProvider in Android bekommen?
- 22. Android: Aufruf von benutzerdefinierten Methoden in einem ContentProvider
- 23. Binary Tree rekursive Einfügemethode funktioniert nicht
- 24. Schließen der Datenbank in einem ContentProvider
- 25. UISlider Update innerhalb von UITableViewCell
- 26. Update Composite-Typ innerhalb Array
- 27. Cursor Wrapping/Unwrapping in ContentProvider
- 28. Benutzerdefinierter ContentProvider für verschlüsselten Speicher
- 29. getStartDateFromUri (Udacity Sonnenschein app - Lektion 4 Contentprovider)
- 30. INNER JOIN innerhalb UPDATE OUTPUT in einer t-SQL-Abfrage
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
Wenn sonst muss ich eine neue Zeile erstellen .... Was ist der beste Weg, das zu tun – Mak
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