我在 Android 中使用 GreenDAO 进行数据库处理。执行许多数据库更改(> 15.000)时,我收到此错误消息:
数据库 '/data/data/...' 的连接池在 30.000002 秒内无法授予带有标志 0x1 的线程 312 (Thread-312) 的连接。
一切都卡住了。为什么会发生此错误?
当我想在一个表上选择一个用于之前没有结束事务的事务的查询时,我收到了这条消息。endTransaction()
在 finally 块事务上执行后问题解决。
我不能肯定地说这个特定的实现,但是有一个通常支持 ORM 的连接池。连接池打开一定数量的数据库连接,并在您关闭它们并打开新连接时回收它们。该错误告诉您的是它可能达到了极限。发生这种情况的原因有很多,一个是数据库中可能存在一些死锁,因为您正在更新两个表,并且两个不同的事务持有不同的表,等待另一个表释放。或者只是因为打开的连接太多,数据库或连接池变得混乱。
抱歉,这不是一个真正的答案,但您需要查看 GreenDAO 的文档以了解这是如何发生的。
通过 DBFlow FlowQueryList 创建与 SQLite 的太多连接时,我收到此消息。我的解决方案是确保一旦你完成了要调用的查询列表endTransactionAndNotify()
,然后close()
在查询列表上。
单独打电话endTransactionAndNotify()
并不能解决问题。我希望这会有所帮助,这个线程肯定对我有帮助。