Зачем мне загружать весь каталог «database» в Android, чтобы увидеть содержимое базы данных SQLite? - PullRequest
0 голосов
/ 24 апреля 2019

Итак, я успешно вставляю и извлекаю данные из базы данных SQLite. Но если я захожу в Device File Explorer, сохраняю файл .db (из каталога databases) на моем компьютере и открываю его с помощью sqlite3 из терминала (с доступом с правами root), он не показывает ни таблиц, ни содержимого вообще (я тоже попробовал плагин SQLiteBrowser и Database Navigator и результат тот же).

Однако там также есть файлы .db-shm и .db-wal, поэтому, если я скачаю весь каталог, а затем открою .db, он покажет мне содержимое без проблем. Так что именно делают эти файлы? Это какие-то метаданные? Зачем мне их тоже каждый раз скачивать?

Примечание. Я запускаю эмулятор.

Редактировать : для пользователей, утверждающих, что это дублирующий вопрос: я видел этот связанный вопрос и ответ, и мне не было ясно, что делают эти файлы или зачем мне это нужно скачайте их, чтобы увидеть мой .db файл.

1 Ответ

1 голос
/ 24 апреля 2019

Из * источника

-wal

Файлы журнала записи (WAL)
Запись с опережениемФайл журнала или WAL используется вместо журнала отката, когда SQLite работает в режиме WAL.Как и в случае журнала отката, целью файла WAL является реализация атомарной фиксации и отката.Файл WAL всегда находится в том же каталоге, что и файл базы данных, и имеет то же имя, что и файл базы данных, за исключением того, что с добавленными 4 символами -wal. Файл WAL создается при открытии первого подключения к базе данных и обычно удаляется при закрытии последнего подключения к базе данных.Тем не менее, если последнее подключение не завершается без ошибок, файл WAL останется в файловой системе и будет автоматически очищен при следующем открытии базы данных.

-shm

Файлы с общей памятью
При работе в режиме WAL все подключения к базе данных SQLite, связанные с одним и тем же файлом базы данных, должны совместно использовать некоторую память, которая используется в качестве индекса для файла WAL.,В большинстве реализаций эта общая память реализуется путем вызова mmap () для файла, созданного для этой единственной цели: файла общей памяти.Файл совместно используемой памяти, если он существует, находится в том же каталоге, что и файл базы данных, и имеет то же имя, что и файл базы данных, за исключением добавления 4-символов «-shm».Файлы общей памяти существуют только при работе в режиме WAL.

Файл общей памяти не содержит постоянного содержимого.Единственная цель файла с разделяемой памятью - предоставить блок разделяемой памяти для использования несколькими процессами, обращающимися к одной и той же базе данных в режиме WAL.Если VFS может предоставить альтернативный метод для доступа к общей памяти, то этот альтернативный метод может быть использован, а не файл общей памяти.Например, если PRAGMA Lock_mode установлен на EXCLUSIVE (это означает, что только один процесс может получить доступ к файлу базы данных), то общая память будет выделяться из кучи, а не из файла общей памяти, а файл общей памяти будетникогда не будет создан.

Файл общей памяти имеет тот же срок жизни, что и связанный с ним файл WAL.Файл с общей памятью создается при создании файла WAL и удаляется при удалении файла WAL.Во время восстановления файла WAL файл общей памяти воссоздается с нуля на основе содержимого восстанавливаемого файла WAL.

Надеюсь, это все прояснит для вас.

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