Измените режим базы данных SQLite на чтение и запись - PullRequest
74 голосов
/ 05 октября 2009

Как я могу изменить базу данных SQLite с чтения только на чтение и запись?

Когда я выполнял оператор обновления, я всегда получал:

Ошибка SQL: попытка записи базы данных только для чтения

Файл SQLite является записываемым файлом в файловой системе.

Ответы [ 14 ]

58 голосов
/ 05 октября 2009

Причиной появления этого сообщения об ошибке может быть несколько причин:

  • В нескольких процессах база данных открыта одновременно ( см. FAQ ).

  • Существует плагин для сжатия и шифрования базы данных. Не позволяет изменять БД.

  • Наконец, в другом FAQ говорится: «Убедитесь, что каталог, содержащий файл базы данных, также доступен для записи пользователю, выполняющему сценарий CGI». Я думаю, это потому, что движок должен создавать больше файлов в каталоге.

  • Вся файловая система может быть доступна только для чтения, например, после сбоя.

  • В системах Unix другой процесс может заменить весь файл.

5 голосов
/ 09 июня 2013

Я решил эту проблему, сменив владельца на root для всех файлов в / db dir.

Просто сделайте ls -l в этой папке, если какой-либо файлер принадлежит root, просто измените его на вас, используя: sudo chown user file

4 голосов
/ 29 февраля 2012

При использовании Android.

Убедитесь, что вы добавили разрешение на запись в EXTERNAL_STORAGE в AndroidManifest.xml.

Добавьте эту строку в файл AndroidManifest.xml выше и вне тега <application>.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

3 голосов
/ 01 января 2013

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

2 голосов
/ 30 мая 2014

В командной оболочке Linux я сделал:

chmod 777 <db_folder>

Где содержится файл базы данных.

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

2 голосов
/ 27 февраля 2012

У меня сегодня тоже была эта проблема.

Это было вызвано ActiveSync в Windows Mobile - папка, в которой я работал, была синхронизирована, поэтому процесс AS время от времени захватывал файл БД, вызывая эту ошибку.

1 голос
/ 17 сентября 2018

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

  1. Экземпляр базы данных открыт в другом приложении. Моя БД оказалась в заблокированном состоянии, поэтому она перешла в режим только для чтения. Мне удалось отследить его, остановив второй экземпляр приложения, совместно использующего базу данных.

  2. Разрешение дерева каталогов - убедитесь, что у учетной записи пользователя есть разрешение не только на уровне файлов, но и на всем верхнем уровне каталогов вплоть до / level.

Спасибо

1 голос
/ 24 июля 2018

(это сообщение об ошибке обычно вводит в заблуждение и обычно является общей ошибкой прав доступа)

В Windows

  • Если вы запускаете SQL напрямую для базы данных, убедитесь, что приложение, которое вы используете для запуска SQL, запускается от имени администратора
  • Если приложение пытается выполнить обновление, учетной записи, которую оно использует для доступа к базе данных, могут потребоваться разрешения для папки, содержащей файл вашей базы данных. Например, если IIS обращается к базе данных, IUSR и IIS_IUSRS могут потребоваться соответствующие разрешения (вы можете попробовать это, временно предоставив этим учетным записям полный контроль над папкой, проверив, работает ли это, а затем связав разрешения соответствующим образом)
1 голос
/ 13 ноября 2014

В Linux предоставьте права на чтение / запись всей папке, содержащей файл базы данных.

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

В моем графическом интерфейсе SELinux Management (на Fedora 19) я установил флажок в строке, помеченной httpd_unified (Unify HTTPD-обработка всех файлов содержимого), и я был в порядке.

0 голосов
/ 05 июня 2018

В пути проекта Терминал django_project #

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