Tôi cần thực hiện thủ tục INSERT hoặc UPDATE IF EXIST với cơ sở dữ liệu của mình. Tôi đọc rằng .replace()
là con đường để đi. Nó chèn hồ sơ mới tốt, nhưng nếu bản ghi đã tồn tại, nó không xuất hiện để cập nhật nó.Android SQLite - SQLiteDatabase.replace() thực sự làm gì?
Tôi có một cái gì đó như thế này:
ContentValues values = new ContentValues();
values.put(ID, 1);
values.put(NAME, "bob");
values.put(VISIBLE, true);
db.replace("peopleTable", null, values);
Nếu tôi chạy mã này khi hồ sơ này không có trong cơ sở dữ liệu, nó xuất hiện để tạo bản ghi tốt, như thể tôi đã làm một insert()
. Nhưng nếu tôi thay đổi NAME thành "john" hoặc một cái gì đó như thế, và chạy lại replace()
, nó không xuất hiện để cập nhật bản ghi.
Theo các tài liệu, đây là cú pháp:
public long replace (String table, String nullColumnHack, ContentValues initialValues)
Tại sao lại gọi là initalValues
? Điều đó có nghĩa là các giá trị đó chỉ được sử dụng khi bản ghi không tồn tại và nó sẽ được chèn vào? Nếu vậy, làm thế nào để bạn sử dụng phương pháp để cập nhật một bản ghi? Bạn chỉ định giá trị mới ở đâu?
Nếu tôi hiểu nhầm replace()
là gì, ai đó có thể giải thích mục đích của nó là gì?
Nó INSERT OR REPLACE. –
Bạn có thể sử dụng cả hai thủ tục 'INSERT' và' REPLACE' trong các phương thức 'ContentProvider.insert()' nếu bạn chuyển một tham số đặc biệt trong 'ContentValues' của bạn. Tôi đã viết một bài đăng blog về nó ở đây: [SQLite INSERT OR REPLACE thông qua ContentProvider | Buzzing Android] (http://www.buzzingandroid.com/2013/01/sqlite-insert-or-replace-through-contentprovider/) – JesperB