2010-05-20 35 views
2

我有2個進程:1是寫入一個sqlite數據庫,1是從同一個數據庫讀取。偶爾,我在我的選擇上獲得SQLITE_BUSY。這是正常的嗎?是他們的一些選擇或方式,我可以打開數據庫,以便它阻止,直到它可以完成查詢? (我在公開通話中嘗試了FULLMUTEX選項,但似乎沒有效果)。在只讀數據庫上獲取SQLITE_BUSY是否正常?

回答

2

當SQLite需要寫入時,它會鎖定整個數據庫,所以其他線程/進程無法讀取或寫入它。這就是您的其他進程獲取SQLITE_BUSY的原因。因爲這個原因,如果你需要同時使用多個數據庫的多個線程/進程,SQLite並不是那麼好。如果你只有兩個進程,你可能會逃脫它。

關於你問題的第二部分,你可以告訴的SQLite與sqlite3_busy_timeout功能重試,就像這樣:

sqlite3_busy_timeout(db, 100); /* Retry for up to 100 ms */ 
相關問題