连接池无法授予与线程的连接

时间:2012-07-31 14:29:32

标签: android sqlite greendao

我正在使用GreenDAO在Android中进行数据库处理。当执行许多数据库更改(> 15.000)时,我收到此错误消息:

  

数据库'/ data / data / ...'的连接池无法使用标志0x1授予与线程312(Thread-312)的连接30.000002秒。

一切都被困住了。为什么会发生这种错误?

3 个答案:

答案 0 :(得分:34)

当我想要在没有结束事务的事务上使用的表上选择查询时,我收到了此消息。在finally块事务上执行endTransaction()后问题解决了。

答案 1 :(得分:11)

我不能肯定地说这个特定的实现,但是有一个连接池通常支持ORM。连接池打开一组与数据库的连接,并在关闭它们并打开新连接时对其进行回收。这个错误告诉你的是它可能达到了极限。这可能由于各种各样的原因而发生,一个原因是数据库中可能存在一些死锁,因为您正在更新两个表,而两个不同的事务正在持有不同的表,等待另一个表释放。或者仅仅是开放连接太多而数据库或连接池只是混淆了。

很抱歉,这不是一个真正的答案,但您需要查看GreenDAO的文档,看看这可能会发生。

答案 2 :(得分:1)

当通过DBFlow FlowQueryList创建与SQLite的过多连接时,我收到此消息。我的解决方案是确保在完成查询列表后,在查询列表上调用endTransactionAndNotify()然后close()

单独调用endTransactionAndNotify()并不能解决问题。 我希望这有帮助,这个帖子肯定帮助了我。