sqlite数据库连接/锁定问题

sqlite数据库连接/锁定问题,sqlite,jdbc,locking,connection-pooling,Sqlite,Jdbc,Locking,Connection Pooling,乡亲们 我正在使用sqlite实现一个基于文件的队列()。我在后台运行以下线程: 线程1将内存结构清空到“队列”表中(插入到“队列”表中) 线程1读取并“处理”队列表,每5到10秒运行一次 thread-3-非常不频繁地运行,从“队列”表中清除不再需要的旧数据,并运行真空,因此数据库文件的大小仍然很小 现在,我想要的行为是每个线程获得它需要的任何锁(如果可能,等待超时),然后完成事务。如果线程不并发运行就可以了——重要的是,事务一旦开始不会由于“锁定”错误(如“数据库已锁定”)而失败 我查看了,

乡亲们 我正在使用sqlite实现一个基于文件的队列()。我在后台运行以下线程:

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

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

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


    塔克斯

    如果是我,我会使用一个数据库连接句柄。如果一个线程需要它,它可以将它分配到一个关键部分(或者互斥,或者类似的部分)——这基本上是一个穷人的连接池,池中只有一个连接:)它可以处理数据库。完成后,它将退出关键部分(或释放互斥锁或?)。如果小心地使用单个db连接,就不会出现锁定错误


    -Don

    Thanx Don,这就是我最终可能要做的事情,尽管通过db池设置它将是更“标准”的方式(并且更少混淆,因为您将sqlite与代码中的其他数据库一样对待)。