getWritableDatabase () VS getReadableDatabase () - PullRequest
19 голосов
/ 06 июля 2011

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

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

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

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

Ответы [ 5 ]

18 голосов
/ 06 июля 2011

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

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

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

Дополнительная информация здесь .

2 голосов
/ 05 декабря 2013

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

1 голос
/ 03 декабря 2013

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

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

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

0 голосов
/ 04 сентября 2013

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

0 голосов
/ 06 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...