#android #sqlite #thread-safety #copy
#Android #sqlite #потокобезопасность #Копировать
Вопрос:
Я хотел бы прочитать некоторые данные из базы данных webview.db, которая создается, когда ваше приложение использует WebView. Однако эта база данных управляется классами, которые в основном находятся на уровне пакетов или не предоставляют большого доступа через API.
Поскольку я не могу предоставить общий доступ к их объектам базы данных или блокировкам, как я могу безопасно читать содержимое из этой базы данных, не получая ошибок «база данных заблокирована» или аналогичных исключений?
Мне нужно только читать, мне не нужно писать.
Если нет способа безопасно получать sql-запросы / курсоры к ней, есть ли способ безопасно скопировать фактический файл webview.db потокобезопасным способом? Существует ли опасность получения поврежденной копии?
Большое спасибо
Ответ №1:
Я думаю, что все блокировки находятся на уровне sqlite, а не в коде Java, поэтому вы должны быть в состоянии обойтись простым открытием базы данных и чтением из нее, не путая webview.
Однако по той же причине вы должны быть готовы к ошибкам блокировки и повторять свои запросы до тех пор, пока блокировка не исчезнет. База данных будет заблокирована, когда webview выполнит инструкции по изменению данных.
Надеюсь, webview не устанавливает эксклюзивную блокировку на всю базу данных на все время ее выполнения, но я не вижу причины для этого.