Должен ли я постоянно открывать() и закрывать() мою базу данных SQL или оставлять ее открытой?
Я создаю приложение, которое использует базу данных SQL для хранения данных. Способ разработки приложения будет обновляться каждые 3 минуты или около того с новыми данными в зависимости от действий пользователя во время работы приложения.
В учебниках, которые я видел, они рекомендуют закрыть базу данных после ее изменения (это "дорого" с точки зрения ресурсов).
Лучше ли оставить его открытым на время моего приложения, так как оно обновляется на довольно частой основе или я должен запустить метод close() сразу после каждого изменения?
Я думаю, мое беспокойство заключается в том, что открытие его и его закрытие постоянно привлекают больше ресурсов, чем это могло бы оставить его открытым все время.
Ответы
Ответ 1
Я попытался оставить соединение открытым один раз - я использовал его для заполнения репитера или что-то еще - не могу вспомнить сейчас.
Позже в программе у меня была другая необходимость использовать соединение - я думаю, что у меня это было, так что, когда пользователь нажал на родительский элемент в ретрансляторе, подробный div выведет больше информации для этого элемента. Это порождало ошибку - что-то вроде "не может открыться() в открытом соединении".
Я думаю, что ошибки можно было бы избежать другим способом (например, проверить, было ли соединение, которое я пытаюсь открыть, уже открыто), но, как я думал об этом, я понял, что мне придется сделать эту стандартную практику во всем моем приложении, и это казалось слишком большой работой, поэтому я просто стал обычной практикой всегда закрывать свои соединения после каждого использования.
Связи остаются в пуле подключений - я не визг на этом, но если мне было интересно узнать о производительности, я бы подумал, что с учетом того, что стоит открыть соединение несколько раз - - в любом случае ваша ситуация требует.
Другая мысль заключается в том, что администратор базы данных может принудительно закрыть все открытые соединения, или db может закрыться по какой-то другой причине. Если вы не дБА, вы можете подумать о риске/выгоде в зависимости от того, что у вас нет долгосрочного контроля, например, чтобы поддерживать соединение открытым.
Ответ 2
Три минуты - это вечность на сегодняшних процессорах, даже на телефонных процессорах. Я бы закрыл его и каждый раз открывал. Это лучше, чем, возможно, оставлять ручки в "эфире".
Ответ 3
Скажем, у вас есть несколько операций с БД, которые выполняются обратно в одном потоке. Я бы сохранил БД для выполнения этих действий. Однако закройте БД после выполнения работы.
Ответ 4
Я думаю, что ответ на этот вопрос также зависит от того, какой тип приложения обращается к базе данных.
Если вы повторно запросите базу данных много
В этом случае вы можете сохранить базу данных открытой.
Есть ли другие приложения, обращающиеся к одной и той же базе данных?
Если существует риск для concurrency или проблем с блокировкой, возможно, было бы разумно закрыть базу данных после завершения чтения/записи с/на нее.
Посмотрите на следующий URL
Когда закрыть соединение db на Android? Каждый раз после завершения операции или после выхода приложения
Спасибо Deepak
Ответ 5
если вы спросите меня обо всем, что я до сих пор читал об андроиде, и в целом лучше закрыть его сразу после внесения изменений.
То, что я нахожу лучше всего, когда вы можете, это сделать и зарегистрировать поставщика контента.
У него свои цены, но я считаю, что вы получаете намного больше, чем платите.
Вы можете сделать почти все с поставщиком контента, а пример блокнота на портале Android отлично подходит для изучения того, как его реализовать. он заботится о синхронизации db и открывает/закрывает его. так что, возможно, посмотрите на это.