Androidでのデータベース処理にGreenDAOを使用しています。多くのデータベース変更(> 15.000)を実行すると、次のエラーメッセージが表示されます。
データベース'/data / data / ...'の接続プールは、フラグ0x1のスレッド312(スレッド-312)への接続を30.000002秒間許可できませんでした。
すべてが行き詰まります。なぜこのエラーが発生するのですか?
以前にトランザクションが終了していないトランザクションで使用されているテーブルのクエリを選択したいときに、このメッセージが表示されました。endTransaction()
トランザクションのfinallyブロックで実行した後に問題が解決しました。
この特定の実装についてははっきりとは言えませんが、通常はORMをサポートする接続プールがあります。接続プールは、データベースへの設定された数の接続を開き、それらを閉じて新しい接続を開くときにそれらをリサイクルします。そのエラーがあなたに伝えているのは、おそらく限界に達したということです。これはさまざまな理由で発生する可能性があります。1つは、2つのテーブルを更新していて、2つの異なるトランザクションが、もう一方が解放されるのを待っている異なるテーブルを保持しているため、DBにデッドロックが発生している可能性があることです。または、開いている接続が多すぎて、DBまたは接続プールが混乱しているだけです。
申し訳ありませんが、それは実際には答えではありませんが、GreenDAOのドキュメントを見て、これがどのように発生するかを確認する必要があります。
DBFlow FlowQueryListを介してSQLiteへの接続を作成しすぎると、このメッセージが表示されます。私の解決策は、クエリリストを呼び出してから、クエリリストに追加することを確認することendTransactionAndNotify()
でしclose()
た。
一人で電話endTransactionAndNotify()
してもうまくいきませんでした。これがお役に立てば幸いです。このスレッドは確かに私を助けてくれました。