2014-12-19 23 views
0

我希望一切順利,我有一個關於sqlite的查詢。 這可能是兩個不同的sqlite表訪問的。 ex。 我有表A和B.可以同時訪問A和B.插入更新表值。iOS中的sqlite問題同時訪問兩個表

我有兩個不同的表,myDatabase(test_db.sqlite)中的表1和表2。

表1只能由主線程訪問。 表2將只能被後臺線程訪問。

現在讓c。 我已經打開數據庫連接使用後臺線程...將值插入到表2中。 將值插入到表2中............。主線程嘗試同時打開相同的數據庫連接,以檢索表1中的數據......以及應用程序崩潰。

如何同時打開相同的數據庫連接。

請檢查該編輯一個

+0

你應該知道關於連接和橋表 – 2014-12-19 09:28:41

+1

你可以提出這個問題嗎?嘗試在同一時間執行多個插入操作時,您會遇到什麼錯誤?你用什麼代碼來做到這一點? – 2014-12-19 09:40:02

+0

通常,我們創建一個用於處理數據庫操作的全局數據庫實例。您可以單獨爲您的兩個表啓動數據庫查詢,以便在第一次成功時執行第二個數據庫查詢。因此,如果存在,可以避免任何含糊不清的情況。更多與我們分享您的代碼。 – NewStackUser 2014-12-19 10:23:53

回答

0

[編輯]

您通過在不同的線程訪問數據庫中獲取的問題。你可以通過使用線程安全模式來處理這個問題。

SQL docs

的SQLite支持三種不同的線程模式:

單線程。在這種模式下,所有的互斥鎖都被禁用,並且SQLite不安全,可以同時在多個線程中使用。

多線程。在這種模式下,如果兩個或多個線程中沒有同時使用單個數據庫連接,則SQLite可以安全地用於多個線程。

序列化。在序列化模式下,SQLite可以安全地由多個線程使用,沒有任何限制。

因此,您可以使用編譯時參數SQLITE_THREADSAFE來選擇線程模式。

我建議您在每個線程中打開不同的數據庫連接,或者在序列化模式下重建SQLite(使用SQLITE_THREADSAFE = 1)。


OLD答:

這是很難回答你的問題,如果你不提供您收到確切的錯誤。但是,假設你的查詢沒問題,最可能的原因是你沒有正確處理你的sqlite流。

我想你的問題是你正在更新表「A」,然後當試圖更新表「B」它崩潰。這就是爲什麼你試圖創建一個查詢來更新它們。

所以,重用你sqlite3_stmt使第二查詢之前,你應該先打電話sqlite3_finalize(yourStatement)從內存中釋放出來的語句,然後,如果你想第二個查詢再打電話sqlite3_prepare_v2,所以數據庫隨後準備接受下一個查詢。

+0

請檢查更新的問題 – Harish 2014-12-19 10:54:38