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

GetWritableDatabase() VS getReadableDatabase()

Я создаю вспомогательный класс базы данных и для некоторых методов внутри него я только запрашиваю базу данных и другие, которые я пишу на нее.

Мое понимание заключается в том, что оба этих метода откроют базу данных и позволят программе либо просто читать, либо записывать в базу данных.

Для операторов запросов стоит просто использовать getReadableDatabase() или есть очень мало различий в производительности между этими двумя методами.

Спасибо за ваше время.

4b9b3361

Ответ 1

Они возвращают один и тот же объект, если диск не заполнен, или существует некоторая ошибка разрешения, которая заставляет открыть базу данных в режиме только для чтения. Название немного запутанно, хотя:)

Как правило, вы должны поместить любой вызов этих методов вне потока пользовательского интерфейса. Оба могут занять много времени.

Если вы не собираетесь писать базу данных, просто используйте getReadableDatabase, поскольку это будет способствовать ясности и намерению кода.

Подробнее здесь.

Ответ 2

Если вы посмотрите NotepadProvider.java в образце проекта Google NotePad, вы увидите, что они используют оба варианта - в зависимости от варианта использования.

Ответ 3

Если вы выполняете слишком много операций с базой данных, например, с запросами, часто обновляясь в некотором случайном порядке, то на самом деле не имеет смысла использовать getReadabledatabase, поскольку ее можно использовать только для чтения значений.

В зависимости от вашего требования к приложениям вы можете судить об использовании. Если вы постоянно читаете значения, вы можете перейти на getreadabledatabase.

Примечание. Несколько раз, когда вы пытаетесь открыть базу данных для записи, используя getwritabledatabase, и если система обнаруживает исключение, например, разрешение на запись, то в этом случае система может выдать исключение. В таких случаях вы можете открыть базу данных, используя getreadabledatabase.

Ответ 4

Если вы получаете ошибки типа "База данных заблокировано" при реализации параллельных (многопоточных) вызовов db, используйте getWritableDatabase вместо getReadableDatabase.

Ответ 5

Открытие базы данных, предназначенной только для чтения, должно слегка повысить производительность, поскольку накладные расходы на блокировку будут ниже.