blackberry - 如何检查黑莓数据库的锁定状态并在必要时解锁?

标签 blackberry sqlite

自从我开始开发我的黑莓应用程序以来,我遇到的最大问题都与 SQLite 数据库有关。

现在我正在对我的应用程序进行压力测试,当出现问题时,我会通过将状态打印到控制台并逐行处理问题来解决这些问题。现在(在我的应用程序上按下按钮后)我收到“数据库已锁定”错误,我不确定该怎么做。

似乎一旦数据库被锁定,它就会一直锁定,直到它被解锁......我的问题是我怎样才能解锁它?首先,如何检查它是否已锁定?

我敢肯定我们的用户不会像我一样乱按按钮,但你永远不会知道。我想考虑每一种可能的情况。

谢谢

编辑:这就是我的应用程序中发生的情况......当我启动它时启动一个线程,该线程根据某些数据的旧程度对我的一个表执行清理(使用 DELETE ).然后线程继续从我的数据库中获取一个 USER 对象(只读),然后它使用这个 USER 对象作为参数来调用 Web 服务。从网络服务检索的数据被插入到我的数据库中。 (这比这要复杂一点,因为此时执行了一些读/写操作。之后,线程触发回调方法来更新我的 UI。

一切正常。我可以在线程运行时退出应用程序并重新启动,并且有一个标志将阻止它启动同一线程的新实例(当然,除非另一个线程已完成)。

现在我的问题是:我的应用程序的主屏幕是一个按钮列表,当用户单击其中一个按钮时,会加载另一个更详细的列表(这需要对数据库进行只读调用)。当我启动应用程序(触发 Web 服务调用线程)然后立即单击主屏幕上的按钮时,表格被锁定。 (并非总是如此,有时需要尝试 4 或 5 次,有时更多,有时更少)。但如果我继续这样做,它最终会锁定,从而无法对我的数据库进行任何调用,因此不再有 UI(这取决于数据库)。

在第二个屏幕上填充 UI 的数据库调用是只读的,我不能有我需要的那么多吗??是什么导致数据库锁定? DB 锁和文件系统错误 (12) 之间有什么区别??

最佳答案

我似乎已经解决了这个问题。我的印象是,如果打开了读/写连接,则可以安全地创建只读连接。

好像不是这样的。如果我打开了一个读/写连接,那么在该连接完成之前,其他连接都无法打开。

我基本上创建了一个读/写连接,设置一个标志以将其标识为打开,并且在我的读取连接期间,如果该标志打开,则使用相同的数据库对象,或者如果它关闭,则创建一个只读。

到目前为止一切顺利。

关于blackberry - 如何检查黑莓数据库的锁定状态并在必要时解锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928577/

相关文章:

mysql - 将 28 添加到日期的最后 2 位数字并替换订单

objective-c - 在应用程序启动之前从 JSON 文件填充 CoreData 数据模型

c# - Entity Framework : Mapping existing one-to-many relationship to Model

sql - 查询返回具有匹配值的连续行

sqlite - 如何使用 typeorm 向现有实体添加新列

java - 黑莓计算器

java - HttpConnection 不适用于 3G

optimization - 针对较小的 .cod (.jar) 文件进行优化

image - Blackberry 应用程序,显示来自 Web 的图像

java - 在 J2ME 中将 RSAPrivateCrtKeyParameters/RSAKeyParameters 转换为 PEM