31

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

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

一切都卡住了。为什么会发生此错误?

4

3 回答 3

36

当我想在一个表上选择一个用于之前没有结束事务的事务的查询时,我收到了这条消息。endTransaction()在 finally 块事务上执行后问题解决。

于 2012-12-26T16:12:18.930 回答
12

我不能肯定地说这个特定的实现,但是有一个通常支持 ORM 的连接池。连接池打开一定数量的数据库连接,并在您关闭它们并打开新连接时回收它们。该错误告诉您的是它可能达到了极限。发生这种情况的原因有很多,一个是数据库中可能存在一些死锁,因为您正在更新两个表,并且两个不同的事务持有不同的表,等待另一个表释放。或者只是因为打开的连接太多,数据库或连接池变得混乱。

抱歉,这不是一个真正的答案,但您需要查看 GreenDAO 的文档以了解这是如何发生的。

于 2012-07-31T16:28:27.813 回答
0

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

单独打电话endTransactionAndNotify()并不能解决问题。我希望这会有所帮助,这个线程肯定对我有帮助。

于 2016-09-27T20:12:19.260 回答