2012-10-17 139 views
2

我正在嘗試在AIR項目中使用SQLite數據庫,似乎有幾個問題,我似乎無法在互聯網上找到答案,特別是有關最佳實踐的答案。Adob​​e Air SQLite誤解

  1. 第一個是關於在同一應用程序實例中有多個連接。某些應用程序進程需要使用分秒數據庫,並且最好由同步類型代碼流(try {} catch(){})提供服務。某些進程可能需要一段時間,並且使用AsyncResponder進行異步代碼流可能會更好。

    因此,我曾想過要有一個ConnectionPoolManager,它有多個異步實例和一個同步SQLConnection類的實例。這是一個體面的,好的還是絕對殘酷的想法?這引導我到下一個要點。

  2. 是否有任何問題有多個異步連接並行運行它們的異步語句?我看到一些人抱怨數據庫被鎖定,我讀過一次只有一條語句可以執行寫操作。

    如果在另一個忙時寫入語句被調用來執行(新的異步...)會發生什麼?會拋出錯誤還是等待超時?

任何關於這個問題的澄清將不勝感激。我一直在尋找那種回答一次性問題的資料,但特別是我的問題。通常我會自己去測試它,但是我擔心我可能無法重現只會在較高使用級別上表現出來的陷阱錯誤。

編輯:這是關於我浪費了半天后發現的問題的一些文檔。 Adobe Doc

回答

2

SQLite沒有寫入併發性;一位作家會阻止所有其他的讀者和作家。

發生這種衝突時,會拋出ID爲3119的SQLError。在這種情況下,應用程序應該等待並重試。 SQLite有一個內置的設置來自動執行這樣的等待,但這不是由Air公開的。您必須在您的代碼中手動執行此操作,其中is not easy

因此,與SQLite建立單一連接會更容易。 如果您想異步使用它,您必須使用Mutex來管理訪問。

+0

謝謝你。這是令人沮喪的,因爲在使用db時它需要更大的複雜性。我想我會在Adobe論壇發佈這個信息,看看是否有人在這個問題上有任何設計提示,因爲我知道我不是第一個遇到這個問題的人。我希望有一種方法來暴露超時參數。 –