Подтвердить что ты не робот

Пул соединений не смог подключиться к потоку

Я использую GreenDAO для обработки базы данных в Android. При выполнении многих изменений базы данных ( > 15.000) я получаю сообщение об ошибке:

Пул соединений для базы данных '/data/data/...' не смог предоставить соединение с потоком 312 (Thread-312) с флагами 0x1 в течение 30.000002 секунд.

Все застревает. Почему происходит эта ошибка?

4b9b3361

Ответ 1

Я не могу точно сказать об этой конкретной реализации, но есть соединение, обычно поддерживающее ORM. Пул соединений открывает определенное количество подключений к базе данных и перерабатывает их по мере их закрытия и открывает новые соединения. Эта ошибка говорит вам, что она, вероятно, превзошла предел. Это может произойти по целому ряду причин: один из них состоит в том, что, возможно, в БД есть какой-то тупик, потому что вы обновляете две таблицы, а две разные транзакции содержат разные таблицы, ожидающие выхода другого. Или просто, что слишком много открытых подключений, и пул DB или пулов просто запутывается.

Извините, что на самом деле это не ответ, но вам нужно посмотреть документы для GreenDAO, чтобы посмотреть, как это может произойти.

Ответ 2

Я получил это сообщение, когда хочу выбрать запрос в таблице, который используется для транзакции без завершения транзакции раньше. Проблема решена при выполнении endTransaction() по окончательному блоку транзакции.

Ответ 3

Я получил это сообщение при создании слишком большого количества соединений с SQLite через DBFlow FlowQueryList. Мое решение состояло в том, чтобы убедиться, что как только вы закончили с списком запросов для вызова endTransactionAndNotify(), а затем close() в списке запросов.

Только вызов endTransactionAndNotify() не помог. Надеюсь, это поможет, эта тема, конечно, помогла мне.