2017-04-01 408 views
0

我得到這個錯誤「QSqlError("5", "Unable to fetch row", "database is locked")QSqlError(「5」,「無法抓取行」,「數據庫被鎖定」)

我已經做了我的研究,我認爲從事實的問題出現了,我我正在執行INSERT查詢,而SELECT查詢仍處於活動狀態,這會鎖定數據庫。現在我想象會經常遇到這個問題,因爲通常根據SELECT查詢的輸出寫入數據庫,所以我想問一下解決這個問題的最好方法是什麼?在關閉query.finish()以解鎖數據庫後,我能夠獲取查詢(使用query.next())嗎?或者我應該將結果存儲在臨時容器中,關閉查詢然後遍歷臨時容器?

非常感謝你提前

+2

的「數據庫被鎖定」發生錯誤時,纔會有*有一個活動事務的另一個*連接。但無論如何,如果您修改了當前正在閱讀的數據,則結果是未指定的。 –

+0

您能否詳細說明「結果未指定」? –

+0

結果行可以直接從表中讀取,也可以從臨時排序列表或索引讀取。因此,當您在遍歷表時進行更改時,可能會丟失或重複條目。 –

回答

1

你有當您運行此上的數據庫閱讀器?我有一個類似的問題,只有當我運行DB Browser for SQLite時纔會發生。確保您沒有任何其他打開數據庫文件的軟件。我並不總是在使用DB Browser for SQLite時遇到這個問題,但是當我這樣做時,關閉程序就修復了它。

它除了,我傾向於運行query.finish()每個查詢完成後,確保沒有互動。

我希望這可以幫助你!