Как я могу изменить базу данных SQLite с режима "только для чтения" на "чтение-запись"?
Когда я выполнял инструкцию обновления, я всегда получал:
Ошибка SQL: попытка записи базы данных только для чтения
Файл SQLite - это записываемый файл в файловой системе.
Ответы:
Это сообщение об ошибке может быть вызвано несколькими причинами:
База данных открыта у нескольких процессов одновременно ( см. FAQ ).
Есть плагин для сжатия и шифрования базы данных. Это не позволяет изменять БД.
Наконец, в другом FAQ говорится: «Убедитесь, что каталог, содержащий файл базы данных, также доступен для записи пользователю, выполняющему сценарий CGI». Я думаю, это потому, что движку нужно создать больше файлов в каталоге.
Вся файловая система может быть доступна только для чтения, например, после сбоя.
В системах Unix другой процесс может заменить весь файл.
источник
Я решил это, сменив владельца с root на меня для всех файлов в каталоге / db.
Просто сделайте это
ls -l
в этой папке, если какой-либо из файловых серверов принадлежит вам,root
просто измените его на вас, используя:sudo chown user file
источник
Эта ошибка обычно возникает, когда к вашей базе данных уже обращается одно приложение, а вы пытаетесь получить к ней доступ с помощью другого приложения.
источник
Если вы используете Android.
Убедитесь, что вы добавили разрешение на запись
EXTERNAL_STORAGE
в свойAndroidManifest.xml
.Добавьте эту строку в свой
AndroidManifest.xml
файл выше и вне вашего<application>
тега.Это позволит вашему приложению писать на SD-карту. Это поможет, если
EXTERNAL_STORAGE
именно там вы сохранили свою базу данных на устройстве.источник
В командной оболочке Linux я сделал:
Где находится файл базы данных.
Оно работает. Теперь я могу получить доступ к своей базе данных и сделать запросы на вставку.
источник
(это сообщение об ошибке обычно вводит в заблуждение и обычно является общей ошибкой разрешений)
В Windows
источник
У меня тоже была эта проблема сегодня.
Это было вызвано ActiveSync в Windows Mobile - папка, в которой я работал, была синхронизирована, поэтому процесс AS захватил файл БД время от времени, вызывая эту ошибку.
источник
Чтобы поделиться личным опытом, я столкнулся с этой ошибкой, которая в конечном итоге исправила оба. Возможно, это не обязательно связано с вашей проблемой, но похоже, что эта ошибка настолько типична, что ее можно отнести к большому количеству вещей.
Экземпляр базы данных открыт в другом приложении. Моя БД оказалась в "заблокированном" состоянии, поэтому она перешла в режим только для чтения. Я смог отследить это, остановив второй экземпляр приложения, использующего БД.
Разрешение дерева каталогов - убедитесь, что учетная запись пользователя имеет разрешения не только на уровне файла, но и на всем верхнем уровне каталогов вплоть до / level.
Спасибо
источник
В Linux предоставьте разрешения на чтение и запись для всей папки, содержащей файл базы данных.
Кроме того, SELinux может блокировать запись. Вам необходимо установить правильные разрешения.
В моем графическом интерфейсе управления SELinux (в Fedora 19) я установил флажок в строке с надписью httpd_unified (Unify HTTPD обработка всех файлов содержимого), и все было готово.
источник
В Windows:
tl; dr: попробуйте открыть файл еще раз.
Наша система страдала от этой проблемы, и это определенно не было проблемой с разрешениями, поскольку сама программа могла большую часть времени открывать базу данных как доступную для записи из многих потоков, но иногда (только в Windows, а не в OSX), поток будет получать эти ошибки, даже если все другие потоки в программе не испытывают затруднений.
В конце концов мы обнаружили, что терпели неудачу только те потоки, которые пытались открыть базу данных сразу после того, как другой поток закрыл ее (в течение 3 мс). Мы предположили, что проблема связана с тем, что Windows (или реализация sqlite под Windows) не всегда сразу очищает файловые ресурсы после закрытия файла. Мы обошли это, выполнив тестовый запрос записи к базе данных при открытии (например, создав и затем отбросив таблицу с глупым именем). Если создание / удаление не удалось, мы ждали 50 мс и пытались снова, повторяя, пока не добились успеха или не истекло 5 секунд.
Это сработало; очевидно, просто нужно было достаточно времени, чтобы ресурсы были сброшены на диск.
источник
В Ubuntu измените владельца на группу Apache и предоставьте необходимые разрешения (нет, это не 777):
Обновить
Вы также можете установить разрешения для группы и пользователя .
источник
В командной строке введите папку, в которой находится файл базы данных, и выполните следующую команду:
Это предоставит все разрешения всем пользователям.
источник
Отредактируйте БД: у меня возникли проблемы с редактированием db. В итоге мне пришлось
sudo chown «имя пользователя без полномочий root» ts3server.sqlitedb,
если это не был root, я мог редактировать файл. Имя пользователя - это имя пользователя моей учетной записи без полномочий root.
Автоматический запуск TeamSpeak: в качестве учетной записи без полномочий root
crontab -e
@reboot / путь к ts3server / aka /home/ts3server/ts3server_startscript.sh start
источник
В пути к проекту Терминал django_project #
источник