Potrzebuję wykonać procedurę INSERT lub UPDATE IF EXIST z moją bazą danych. Czytałem, że droga do celu była .replace()
. Wstawia nowe rekordy dobrze, ale jeśli rekord już istnieje, nie wydaje się go aktualizować.Android SQLite - co właściwie robi SQLiteDatabase.replace()?
mam coś takiego:
ContentValues values = new ContentValues();
values.put(ID, 1);
values.put(NAME, "bob");
values.put(VISIBLE, true);
db.replace("peopleTable", null, values);
Jeśli uruchomić ten kod, kiedy nie jest to rekord w bazie danych, wydaje się, aby utworzyć rekord dobrze, jakbym zrobił insert()
. Ale jeśli zmienię NAME na "john" lub coś podobnego i ponownie uruchomę replace()
, to nie wydaje się, aby aktualizować rekord.
Zgodnie z docs, tutaj jest składnia:
public long replace (String table, String nullColumnHack, ContentValues initialValues)
Dlaczego nazywa initalValues
? Czy to oznacza, że te wartości są używane tylko wtedy, gdy rekord nie istnieje i zostanie wstawiony? Jeśli tak, jak użyć tej metody do aktualizacji rekordu? Gdzie określasz nowe wartości?
Jeśli nie rozumiem, co robi replace()
, czy ktoś może wyjaśnić, jaki jest cel?
Czyni włożyć lub wymienić. –
Możesz użyć procedur 'INSERT' i' REPLACE' w swoich metodach 'ContentProvider.insert()', jeśli przekażesz specjalny parametr do 'ContentValues'. Napisałem o tym wpis na blogu: [SQLite INSERT OR REPLACE przez ContentProvider | Buzzing Android] (http://www.buzzingandroid.com/2013/01/sqlite-insert-or-replace-through-contentprovider/) – JesperB