2015-04-30 97 views
0

我有一個應用程序可以將多個(100個)行插入或更新到表中。在我的應用程序中一次只能運行一個線程。在每次插入/更新幾個函數之前,每行都會被計算和檢查。確保安全的SQLite數據庫操作(不是指線程安全的)

我擔心,如果應用程序在插入行開始和結束之間中斷,我的數據將被損壞/不完整。這可能發生嗎?

我嘗試了幾次用主鍵中斷進程,但沒有,但這並不是窮舉方法。

我正在實施這裏討論的單例方法:Is Sqlite Database instance thread safe但這並沒有解決我的問題。

+1

在所有UPDATE和INSERT中使用[transaction](https://www.sqlite.org/lang_transaction.html)。 –

+0

如果我單獨插入200多行,則圍繞所有更新和插入的事務將不起作用。我想出了正確的方法(我認爲)。將所有行信息放入一個數組列表中,然後在開始和結束事務之間放置一個循環以插入所有行。感謝您的評論,但它指出了我的正確方向。 – rnorman3

+0

如果您不想使用交易,您爲什麼接受建議交易的答案? –

回答

1

From the fine manual。 。 。

事務數據庫是其中 出現的所有變化和查詢是原子性,一致性,隔離的和持久(ACID)。 SQLite 實現了可序列化的事務,它們是原子性的,一致的,即使事務被 程序崩潰,操作系統崩潰或 計算機的電源故障中斷,也是持久的。

如果要執行多個幾百個SQL語句,你需要知道,無論是)所有這些承諾,或者b)他們沒有承諾的,換一個transaction內的所有這些SQL語句。