只是想知道是否可以取消或停止选择语句?如何停止/终止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冻结。什么阻止主线程? –