Bagaimana cara mengubah database SQLite dari baca-saja menjadi baca-tulis?
Ketika saya menjalankan pernyataan pembaruan, saya selalu mendapat:
Kesalahan SQL: mencoba menulis database hanya-baca
File SQLite adalah file yang dapat ditulis pada sistem file.
Jawaban:
Ada beberapa alasan untuk pesan kesalahan ini:
Beberapa proses membuka database pada waktu yang sama ( lihat FAQ ).
Ada plugin untuk mengompres dan mengenkripsi database. Itu tidak memungkinkan untuk mengubah DB.
Terakhir, FAQ lain mengatakan: "Pastikan direktori yang berisi file database juga dapat ditulis oleh pengguna yang menjalankan skrip CGI." Saya rasa ini karena mesin perlu membuat lebih banyak file di direktori.
Seluruh sistem file mungkin hanya bisa dibaca, misalnya setelah terjadi crash.
Pada sistem Unix, proses lain dapat menggantikan seluruh file.
sumber
Saya menyelesaikan ini dengan mengubah pemilik dari root ke saya di semua file di / db dir.
Lakukan saja
ls -l
di folder itu, jika salah satu filer dimiliki,root
cukup ubah ke Anda, menggunakan:sudo chown user file
sumber
Kesalahan ini biasanya terjadi ketika database Anda sudah diakses oleh satu aplikasi, dan Anda mencoba mengaksesnya dengan aplikasi lain.
sumber
Jika menggunakan Android.
Pastikan Anda telah menambahkan izin untuk menulis
EXTERNAL_STORAGE
ke AndaAndroidManifest.xml
.Tambahkan baris ini ke
AndroidManifest.xml
file Anda di atas dan di luar<application>
tag Anda .Ini akan memungkinkan aplikasi Anda untuk menulis ke sdcard. Ini akan membantu jika Anda
EXTERNAL_STORAGE
adalah tempat Anda menyimpan database di perangkat.sumber
Di shell perintah Linux, saya melakukan:
Dimana berisi file database.
Berhasil. Sekarang saya dapat mengakses database saya dan membuat kueri penyisipan.
sumber
(pesan kesalahan ini biasanya menyesatkan, dan biasanya merupakan kesalahan izin umum)
Di Windows
sumber
Saya mengalami masalah ini hari ini juga.
Itu disebabkan oleh ActiveSync di Windows Mobile - folder tempat saya bekerja telah disinkronkan sehingga proses AS mengambil file DB dari waktu ke waktu menyebabkan kesalahan ini.
sumber
Dari baris perintah, masukkan folder tempat file database Anda berada dan jalankan perintah berikut:
Ini akan memberikan semua izin kepada semua pengguna.
sumber
Di Linux, berikan izin baca / tulis ke seluruh folder yang berisi file database.
Selain itu, SELinux mungkin memblokir penulisan. Anda perlu mengatur izin yang benar.
Di GUI Manajemen SELinux saya (di Fedora 19), saya mencentang kotak pada baris berlabel httpd_unified (Unify HTTPD menangani semua file konten), dan saya siap melakukannya.
sumber
Di Windows:
tl; dr: Coba buka file lagi.
Sistem kami mengalami masalah ini, dan ini jelas bukan masalah izin, karena program itu sendiri akan dapat membuka database sebagai dapat ditulis dari banyak utas hampir sepanjang waktu, tetapi kadang-kadang (hanya di Windows, bukan di OSX), sebuah utas akan mendapatkan kesalahan ini meskipun semua utas lainnya dalam program tidak mengalami kesulitan.
Kami akhirnya menemukan bahwa utas yang gagal hanyalah utas yang mencoba membuka database segera setelah utas lain menutupnya (dalam 3 md). Kami berspekulasi bahwa masalahnya disebabkan oleh fakta bahwa Windows (atau implementasi sqlite di bawah windows) tidak selalu segera membersihkan sumber daya file setelah menutup file. Kami menyiasatinya dengan menjalankan kueri uji tulis terhadap db saat membuka (misalnya, membuat kemudian menjatuhkan tabel dengan nama yang konyol). Jika buat / jatuhkan gagal, kami menunggu selama 50 md dan mencoba lagi, mengulanginya hingga kami berhasil atau 5 detik berlalu.
Itu berhasil; tampaknya hanya perlu ada cukup waktu agar sumber daya dialirkan ke disk.
sumber
Untuk berbagi pengalaman pribadi saya mengalami kesalahan ini yang akhirnya memperbaiki keduanya. Mungkin tidak selalu terkait dengan masalah Anda, tetapi tampaknya kesalahan ini sangat umum sehingga dapat dikaitkan dengan trilyun hal.
Instance database dibuka di aplikasi lain. DB saya tampaknya telah dalam keadaan "terkunci" sehingga transisi ke mode hanya baca. Saya dapat melacaknya dengan menghentikan instance kedua dari aplikasi yang membagikan DB.
Izin pohon direktori - pastikan untuk memastikan akun pengguna memiliki izin tidak hanya di tingkat file tetapi juga di seluruh tingkat direktori atas sampai ke / level.
Terima kasih
sumber
Di Ubuntu, ubah pemilik ke grup Apache dan berikan izin yang tepat (tidak, ini bukan 777):
Memperbarui
Anda juga dapat mengatur izin untuk grup dan pengguna .
sumber
Edit DB: Saya mengalami masalah saat mengedit db. Saya akhirnya harus
sudo chown 'non root username' ts3server.sqlitedb
selama itu bukan root, saya bisa mengedit file. Nama pengguna adalah nama pengguna akun non root saya.
Mulai otomatis TeamSpeak: sebagai
crontab akun non root Anda -e
@reboot / path ke ts3server / aka /home/ts3server/ts3server_startscript.sh start
sumber
Di jalur proyek Terminal django_project #
sumber