2012-09-14 7 views
7

Tôi thấy số lần đọc bị chặn bởi ghi vào cơ sở dữ liệu đang ở chế độ WAL - tôi bị cho là lý do tại sao.DB SQLite (có WAL) bị khóa khi chuẩn bị một thước đo "chọn" - tại sao?

thiết lập của tôi:

  • cơ sở dữ liệu SQLite3, journal_mode = WAL, đồng bộ = NORMAL
  • Mulitple C quá trình ++ (3 để được chính xác) sử dụng cơ sở dữ liệu - Bất kỳ phương pháp trong các quá trình mở và đóng phi của mình kết nối được chia sẻ với sqlite3_open_v2.
  • Phương pháp đó đang chèn dữ liệu mở db trong chế độ SQLITE_OPEN_READWRITE
  • Phương pháp mà đọc từ cơ sở dữ liệu (tức là chỉ làm chọn báo cáo) mở db trong SQLITE_OPEN_READONLY chế độ

Trong chế độ WAL Tôi tin rằng nó phải được có thể có độc giả đồng thời trong khi có một ghi xảy ra.

Tuy nhiên, tôi nhìn thấy "cơ sở dữ liệu bị khóa" khi tôi đang chuẩn bị một tuyên bố chọn sử dụng sqlite3_prepare_v2

Những gì tôi có thể làm sai mà gây ra đọc để chặn? Tôi có hiểu lầm về việc "Đọc" thực sự là gì không?

Bất cứ lời khuyên đánh giá cao,

nhờ :)

Trả lời

0

kiểm tra cho dù bạn đã sqlite3_reset sau mỗi sqlite3_step bởi vì đây là một trường hợp gây ra cơ sở dữ liệu bị khóa lỗi. sau khi chuẩn bị một câu lệnh với sqlite3_prepare và thực hiện nó với sqlite3_step, bạn cần luôn đặt lại nó bằng sqlite3_reset.

Giao diện sqlite3_reset (S) đặt lại câu lệnh đã chuẩn bị S quay lại bắt đầu chương trình.

hy vọng điều này sẽ giải quyết được vấn đề của bạn ... !!!