2012-01-07 28 views
6

Tôi cần giải quyết vấn đề này.Android SQLite ON UPDATE CONFLICT là có thể?

Tôi đã bắt đầu dự án của mình từ khái niệm sai rằng BẬT THAY THẾ CONFLICT sẽ cập nhật nội dung hàng khi tìm thấy xung đột. Ngoài ra tôi đã nghĩ rằng trong đó chèn (với cuộc xung đột) nếu tôi không đặt một giá trị cho một cột nó sẽ không làm thay thế nhưng giữ giá trị cũ. Thay vào đó tôi chỉ phát hiện ra rằng REPLACE ON CONFLICT nếu nó tìm thấy xung đột, nó sẽ thực hiện xóa -> chèn và nếu nó không thể tìm thấy giá trị cho một cột (nơi tôi đặt null để không cập nhật trường), nó sẽ thay thế null giá trị với giá trị cột mặc định để thực hiện chèn thành công.

Vì vậy, biết tôi có vấn đề này rễ lớn: D

Như bạn hiểu những gì tôi muốn tiếp cận này là:

tôi luôn luôn làm các việc chèn, nếu nó tìm thấy đã liên tiếp với các phím độc đáo cùng (xung đột) nó sẽ chỉ cập nhật các giá trị. Nếu cho một trường nó sẽ không tìm thấy các giá trị (tôi không đặt nó trong ContentValues), nó sẽ không cập nhật các trường đó nhưng giữ nguyên trường cũ (giống như truy vấn cập nhật bình thường mà bạn không đặt cột để cập nhật).

Để giải quyết vấn đề của tôi, tôi tought các giải pháp này:

  • VỀ XUNG ĐỘT CẬP NHẬT (điều này sẽ chỉ làm việc khi bạn chỉ có 1 độc đáo lĩnh vực, nếu bạn có 2 hoặc độc đáo hơn các lĩnh vực mà ném xung đột nó sẽ sụp đổ)
  • CẬP NHẬT VỀ CH FAN NHANH CHÓNG nơi luôn cố gắng cập nhật. Nếu nó không thành công vì nó không thể tìm thấy hàng liên quan đến bản ghi (nó chưa có trong bản ghi), nó sẽ cố gắng chèn một số

Một số người đã nghĩ về vấn đề này và có giải pháp? Hoặc có thể chúng ta chỉ cần cố gắng tìm một giải pháp :)

Tôi nghĩ rằng cách tốt nhất là giữ mọi thứ ở mức độ thấp (mức db) để duy trì hiệu suất tốt.

+0

Bạn sẽ tìm thấy các ý tưởng hay tại đây: http://stackoverflow.com/questions/418898/sqlite-upsert-not-insert-or-replace –

Trả lời

7

Làm theo tài liệu chính thức của SQLite3 Không thể tự động thực hiện cập nhật ON CONFLICT UPDATE nhưng chỉ có REPLACE giống như DELETE -> INSERT (giá trị mới).

Các vấn đề liên quan