2010-07-09 188 views
5

民间 我正在实施基于文件的队列(see my earlier question)使用sqlite。我有以下线程在后台运行:sqlite数据库连接/锁定问题

  1. 线程1将清空内存结构到“队列”表(插入到“队列”表中)。
  2. 线程1读取并“处理”“队列”表每5到10秒运行一次
  3. 线程3 - 运行非常少,并清除不再需要从“队列”表中删除的旧数据,运行真空,因此数据库文件的大小仍然很小。

现在我想要的行为是让每个线程获得所需的任何锁定(如果可能,请等待超时),然后完成事务。如果线程不同时运行,那么确定 - 重要的是事务一旦开始就不会因“锁定”错误(例如“数据库已锁定”)而失败。

我看着transaction documentation但似乎没有“超时”设施(我正在使用JDBC)。连接中的超时时间可以设置为大量吗?

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

Thanx!

回答

2

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

-Don

+0

感谢名单唐,这就是我可能最终会做,虽然通过一个DB池设置它会做(和更少的混乱,因为你是治疗像其他数据库SQLite的更“标准”的方式在代码中。 – serverman 2010-07-10 13:54:04