2012-02-19 16 views
1

+访问,我想了解的可能途径与SQLite的工作的时候,可以有多个线程在DB工作。 基于stackoverflow和其他网站的各种反应,似乎会有锁定问题时,从多个线程使用相同的sqlitehelper实例。在一个典型的java应用程序中,我希望实例指的是应用程序的不同线程使用的sqlite helper类型的单个对象。在这种情况下,我猜想,锁定是正确使用synchronized块的问题。 [纠正我在这里,因为我不喜欢这种在这里查看sqliethelper实例的方式]的Android SQLite的:锁定从多个线程

我关心的是共享相同的数据库:当一个实例化不同线程的sqlite助手[即每个线程都有自己的对象实例]但在同一个数据库上工作[这个我猜是更接近于具有相同的数据库实例]。 在这种情况下,我会频繁发生数据库锁定错误。即使线程在不同的数据库表上工作,也会发生这种情况。

在我的申请数据库可以由用户交互通过应用或通过服务器[周期性同步]获得的数据来更新。有一段时间,当同步过程和用户​​活动重叠时,我会遇到锁定问题。由于这种数据处理模式似乎在应用程序与服务器同步时很常见,因此想知道如何处理并发问题会导致锁定问题。

我想明白这一点,因为如果这样势必会总是那么可能发生需要仅做一个对数据库的处理程序,并实现了队列,为避免锁。但是这意味着完整的应用程序需要意识到数据库可能不会立即得到更新,他们需要实现监听器来知道数据在数据库中实际更新的时间。

感谢 普拉迪普

回答

0

据我所知SQLite是用于single process usage。不管你一直需要从一个线程访问数据库。您可以从多个客户端进行选择,但一次只能从一个客户端进行选择。而其他读者和作者将会在此期间锁定。

作为一个侧面说明 - 数据库访问可以几乎不被认为是瞬间的。

+0

而其正确的,数据库访问是几乎瞬时的,但底层的东西是隐藏的。我将在典型编程中与同步调用的瞬时不同,一个同步获得写操作的结果。如果结果是成功的,可以立即读取相应的数据。但是我的问题在这里,如果锁将要发生(即使两个线程在不同的表上工作),并且让我在数据库上实现排队行为,那么这与典型的数据库编程有什么不同甚至J2SE项目。 – user1050134 2012-02-19 16:04:57

+1

你实际上是不正确的。多个进程可以访问SQLite数据库。我有2个android应用程序读取,插入,从同一个数据库中删除。 – JPM 2012-03-27 15:13:50

+0

请阅读我提供的链接。它说: “多个进程可以同时打开同一个数据库,多个进程可以在同一时间做一个SELECT但只有一个进程可以在任何时刻进行更改的数据库,但。” 我会信任数据库本身的作者。我想知道你是如何测试这些同步读写的? – 2012-03-31 11:12:46