sqlite数据库连接/锁定问题

时间:2010-07-09 19:19:23

标签: sqlite jdbc locking connection-pooling

民间 我正在使用sqlite实现基于文件的队列(see my earlier question)。我在后台运行以下线程:

  1. thread-1将内存结构清空到“队列”表中(插入“队列”表)。
  2. thread-1读取并“处理”“队列”表每5到10秒运行一次
  3. thread-3 - 很少运行并从“队列”表中清除不再需要的旧数据,并且还运行真空,因此数据库文件的大小仍然很小。
  4. 现在我想要的行为是每个线程获得它需要的任何锁(如果可能的话,等待超时),然后完成事务。如果线程不能并发运行,那就没关系了 - 重要的是事务一旦开始就不会因“锁定”错误而失败,例如“数据库被锁定”。

    我查看了transaction documentation,但似乎没有“超时”功能(我正在使用JDBC)。可以在连接中将超时设置为大量吗?

    我能想到的一个解决方案(未经验证)是拥有最多1个连接的连接池。因此,一次只能连接一个线程,因此我们不应该看到任何锁定错误。还有更好的方法吗?

    感谢名单!

1 个答案:

答案 0 :(得分:2)

如果是我,我会使用单个数据库连接句柄。如果一个线程需要它,它可以在一个关键部分(或互斥,或类似)中分配它 - 这基本上是一个穷人的连接池,池中只有一个连接:)它可以与数据库做生意。完成后,它退出临界区(或释放互斥锁或?)。如果小心使用单个数据库连接,则不会出现锁定错误。

-Don