GetWritableDatabase() VS getReadableDatabase()
Я создаю вспомогательный класс базы данных и для некоторых методов внутри него я только запрашиваю базу данных и другие, которые я пишу на нее.
Мое понимание заключается в том, что оба этих метода откроют базу данных и позволят программе либо просто читать, либо записывать в базу данных.
Для операторов запросов стоит просто использовать getReadableDatabase() или есть очень мало различий в производительности между этими двумя методами.
Спасибо за ваше время.
Ответы
Ответ 1
Они возвращают один и тот же объект, если диск не заполнен, или существует некоторая ошибка разрешения, которая заставляет открыть базу данных в режиме только для чтения. Название немного запутанно, хотя:)
Как правило, вы должны поместить любой вызов этих методов вне потока пользовательского интерфейса. Оба могут занять много времени.
Если вы не собираетесь писать базу данных, просто используйте getReadableDatabase
, поскольку это будет способствовать ясности и намерению кода.
Подробнее здесь.
Ответ 2
Если вы посмотрите NotepadProvider.java в образце проекта Google NotePad, вы увидите, что они используют оба варианта - в зависимости от варианта использования.
Ответ 3
Если вы выполняете слишком много операций с базой данных, например, с запросами, часто обновляясь в некотором случайном порядке, то на самом деле не имеет смысла использовать getReadabledatabase, поскольку ее можно использовать только для чтения значений.
В зависимости от вашего требования к приложениям вы можете судить об использовании. Если вы постоянно читаете значения, вы можете перейти на getreadabledatabase.
Примечание. Несколько раз, когда вы пытаетесь открыть базу данных для записи, используя getwritabledatabase, и если система обнаруживает исключение, например, разрешение на запись, то в этом случае система может выдать исключение. В таких случаях вы можете открыть базу данных, используя getreadabledatabase.
Ответ 4
Если вы получаете ошибки типа "База данных заблокировано" при реализации параллельных (многопоточных) вызовов db, используйте getWritableDatabase вместо getReadableDatabase.
Ответ 5
Открытие базы данных, предназначенной только для чтения, должно слегка повысить производительность, поскольку накладные расходы на блокировку будут ниже.