只是想知道是否可以取消或停止選擇語句?如何停止/終止ultralite SELECT語句?
我有一個應用程序與sap ultralite數據庫。數據庫連接和語句在單例中處理。
我有一個ViewController
在那裏我開始一個沉重的READ
- 在後臺有時需要2-3s的操作。在同一個ViewController
中,您可以更改一些值並將其保存爲WRITE
-操作,該操作忽略了ViewController
。
我的問題是,如果我真的快和/或READ
- 操作很慢,我的ViewController沒有被駁回,因爲WRITE
操作正在等待READ
誠合作的結束。所以UI凍結了幾秒鐘。
要麼感謝我的谷歌搜索技能或可憐的ultralite文檔,沒有人知道,我怎樣才能取消當前正在進行的SELECT
-statement?(結果不再重要,因爲View將被解僱)或者我怎樣才能同時允許多個陳述?該READ
和WRITE
操作不同的表時,如果這是很重要
編輯:(總結題)
- 是否有可能
READ
和WRITE
在同一時間的UltraLite? - 如果沒有,是否還有其他解決方案? (目前,我們測試複製的數據庫)
UPDATE(詳細): 嗯,我們發現了一個變通,但這並不回答這個問題。
我們有一個應用程序一個ShoppingCardListView
(項存儲在UltraLite數據庫)。在此視圖中,您可以在Freeform-ViewController
內更改項目(更改運輸日期,數量...),其中顯示了一些統計數據。
統計信息是繁重的READ
操作,有時最多需要5秒。所以,如果你例如更改項目的金額,然後按DONE
鍵,Freeform-ViewController
開始WRITE
-operation(UPDATE),被駁回,ShoppingCard被(再次READ
到數據庫中得到改變)進行更新。
最後一點是壞事,但我們實現了FreeformVC
的完成處理程序,它只更新一個項目,而不是從數據庫的READ
整個購物卡。這似乎工作,但是,這不是最好的解決方案。如果你點擊得非常快,你有時會覺得延遲,如果你想再次從數據庫中讀取,所以的問題依然存在....
您可以將您的讀/寫操作放在後臺隊列中,以便您的UI保持響應。您可以使用Grand Central Dispatch('dispatch_async'到後臺隊列,然後在完成讀取/寫入時返回到主隊列)或「NSOperationQueue」。只要確保你的數據庫類是線程安全的。 –
@AaronBrager:讀/寫操作在後臺。如果'READ'花費的時間過長,所以第二個'WRITE'語句必須等待,直到第一個準備好(< - 這會導致'UI'凍結) – longilong
如果'WRITE'語句處於背景,那麼它不應該導致UI凍結。什麼阻止主線程? –