自从我开始开发我的黑莓应用程序以来,我遇到的最大问题都与 SQLite 数据库有关。
现在我正在对我的应用程序进行压力测试,当出现问题时,我会通过将状态打印到控制台并逐行处理问题来解决这些问题。现在(在我的应用程序上按下按钮后)我收到“数据库已锁定”错误,我不确定该怎么做。
似乎一旦数据库被锁定,它就会一直锁定,直到它被解锁......我的问题是我怎样才能解锁它?首先,如何检查它是否已锁定?
我敢肯定我们的用户不会像我一样乱按按钮,但你永远不会知道。我想考虑每一种可能的情况。
谢谢
编辑:这就是我的应用程序中发生的情况......当我启动它时启动一个线程,该线程根据某些数据的旧程度对我的一个表执行清理(使用 DELETE ).然后线程继续从我的数据库中获取一个 USER 对象(只读),然后它使用这个 USER 对象作为参数来调用 Web 服务。从网络服务检索的数据被插入到我的数据库中。 (这比这要复杂一点,因为此时执行了一些读/写操作。之后,线程触发回调方法来更新我的 UI。
一切正常。我可以在线程运行时退出应用程序并重新启动,并且有一个标志将阻止它启动同一线程的新实例(当然,除非另一个线程已完成)。
现在我的问题是:我的应用程序的主屏幕是一个按钮列表,当用户单击其中一个按钮时,会加载另一个更详细的列表(这需要对数据库进行只读调用)。当我启动应用程序(触发 Web 服务调用线程)然后立即单击主屏幕上的按钮时,表格被锁定。 (并非总是如此,有时需要尝试 4 或 5 次,有时更多,有时更少)。但如果我继续这样做,它最终会锁定,从而无法对我的数据库进行任何调用,因此不再有 UI(这取决于数据库)。
在第二个屏幕上填充 UI 的数据库调用是只读的,我不能有我需要的那么多吗??是什么导致数据库锁定? DB 锁和文件系统错误 (12) 之间有什么区别??
最佳答案
我似乎已经解决了这个问题。我的印象是,如果打开了读/写连接,则可以安全地创建只读连接。
好像不是这样的。如果我打开了一个读/写连接,那么在该连接完成之前,其他连接都无法打开。
我基本上创建了一个读/写连接,设置一个标志以将其标识为打开,并且在我的读取连接期间,如果该标志打开,则使用相同的数据库对象,或者如果它关闭,则创建一个只读。
到目前为止一切顺利。
关于blackberry - 如何检查黑莓数据库的锁定状态并在必要时解锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928577/