121 votes

Modifier le mode de la base de données SQLite en lecture-écriture

Comment puis-je faire passer une base de données SQLite de lecture seule à lecture-écriture ?

Lorsque j'ai exécuté l'instruction de mise à jour, j'ai toujours obtenu :

Erreur SQL : tentative d'écriture d'une base de données en lecture seule

Le fichier SQLite est un fichier accessible en écriture sur le système de fichiers.

5 votes

L'utilisateur qui exécute sqlite3 (ou ce que vous utilisez pour exécuter la requête) a-t-il des droits d'écriture sur la base de données ? Avez-vous vérifié la propriété des fichiers ?

1 votes

Je suis sûr qu'ils ont l'autorisation de le faire.

3 votes

J'ai vu cela dans une application web où j'avais oublié de définir le GID sur le fichier de base de données et le compte "www-data" (sous lequel Apache tourne) s'est vu refuser l'accès en écriture au fichier.

102voto

Aaron Digulla Points 143830

Ce message d'erreur peut avoir plusieurs causes :

  • Plusieurs processus ont ouvert la base de données en même temps ( voir la FAQ ).

  • Il existe un plugin pour compresser et crypter la base de données. Il ne permet pas de modifier la base de données.

  • Enfin, une autre FAQ indique : "Assurez-vous que le répertoire contenant le fichier de base de données est également accessible en écriture à l'utilisateur qui exécute le script CGI script". Je pense que c'est parce que le moteur doit créer d'autres fichiers dans le répertoire.

  • L'ensemble du système de fichiers peut être en lecture seule, par exemple après un crash.

  • Sur les systèmes Unix, un autre processus peut remplacer le fichier entier.

34 votes

Je placerais mon offre sur le troisième point - le répertoire contenant le fichier DB devrait également être accessible en écriture pour que le fichier de verrouillage puisse être créé.

2 votes

Première balle pour moi:D

1 votes

Le dernier. J'oublie toujours sudo :P

13voto

Bruno Coelho Points 21

J'ai résolu ce problème en changeant le propriétaire de " root "à mon propre utilisateur, sur tous les fichiers du dossier de la base de données.

Il suffit de le faire ls -l sur ce dossier, et si l'un des fichiers appartient à root Il suffit de le remplacer par votre utilisateur, comme par exemple :

# For each file do:
sudo chown "$USER":"$USER" /path/to/my-folder/file.txt

# Or "R"ecursive.
sudo chown -R "$USER":"$USER" /path/to/my-folder

4voto

Pranav Points 128

Si vous utilisez Android.

Assurez-vous d'avoir ajouté l'autorisation d'écrire à votre EXTERNAL_STORAGE à votre AndroidManifest.xml .

Ajoutez cette ligne à votre AndroidManifest.xml au-dessus et à l'extérieur de votre fichier <application> étiquette.

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

Cela permettra à votre application d'écrire sur la carte SD. Cela sera utile si votre EXTERNAL_STORAGE est l'endroit où vous avez stocké votre base de données sur l'appareil.

0 votes

Cela a résolu mon problème. J'ai modifié la question pour qu'elle soit plus détaillée et plus facile à lire.

0 votes

Merci beaucoup, cela a résolu mon problème aussi. un vote pour :)

2voto

JRummler Points 21

J'ai également rencontré ce problème aujourd'hui.

Ce problème était dû à ActiveSync sur Windows Mobile - le dossier dans lequel je travaillais était synchronisé, de sorte que le processus AS capturait le fichier DB de temps à autre, ce qui provoquait cette erreur.

-1voto

adrian Points 29

À partir de la ligne de commande, entrez dans le dossier où se trouve votre fichier de base de données et exécutez la commande suivante :

chmod 777 databasefilename

Cela permet d'accorder toutes les autorisations à tous les utilisateurs.

24 votes

Ce qui est plutôt mauvais.

1 votes

Réponse parfaite !

1 votes

Cela pourrait résoudre le problème, mais ce n'est pas recommandé car cela pourrait entraîner des problèmes de sécurité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X