如何将SQLite数据库从只读更改为读写?
当我执行更新语句时,我总是得到:
SQL错误:尝试编写只读数据库
SQLite文件是文件系统上的可写文件。
如何将SQLite数据库从只读更改为读写?
当我执行更新语句时,我总是得到:
SQL错误:尝试编写只读数据库
SQLite文件是文件系统上的可写文件。
Answers:
此错误消息可能有多种原因:
当一个应用程序已经访问了您的数据库,而您试图通过另一个应用程序访问它时,通常会发生此错误。
如果使用Android。
确保您已添加写入权限, EXTERNAL_STORAGE
到您的AndroidManifest.xml
。
将此行添加到AndroidManifest.xml
文件的上方和下方<application>
标签。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
这将允许您的应用程序写入sdcard。如果您EXTERNAL_STORAGE
将数据库存储在设备上,这将有所帮助。
在Linux命令Shell中,我做了以下操作:
chmod 777 <db_folder>
其中包含数据库文件。
有用。现在,我可以访问我的数据库并进行插入查询。
(此错误消息通常具有误导性,通常是一般权限错误)
在Windows上
在Linux上,对包含数据库文件的整个文件夹授予读/写权限。
另外,SELinux可能会阻止写入。您需要设置正确的权限。
在我的SELinux管理GUI(在Fedora 19上)中,我选中了标有httpd_unified(统一所有内容文件的HTTPD处理)的行上的框,我很高兴。
为了分享个人经验,我遇到了此错误,最终将两者都修复了。不一定与您的问题有关,但此错误似乎太普遍了,可以归因于庞大的事物。
数据库实例在另一个应用程序中打开。我的数据库似乎处于“锁定”状态,因此它过渡到只读模式。通过停止共享数据库的应用程序的第二个实例,我能够对其进行跟踪。
目录树权限-请确保用户帐户不仅具有文件级别的权限,而且还具有直到/级别的整个上层目录的权限。
谢谢
在命令行中,输入数据库文件所在的文件夹,然后执行以下命令:
chmod 777 databasefilename
这将向所有用户授予所有权限。
在Windows上:
tl; dr:尝试再次打开文件。
我们的系统遇到了这个问题,它绝对不是权限问题,因为程序本身大多数时候都可以从许多线程以可写的方式打开数据库,但偶尔(仅在Windows上,而不是在OSX上),即使程序中的所有其他线程都没有遇到困难,一个线程也会收到这些错误。
我们最终发现失败的线程只是那些试图在另一个线程关闭数据库后(3毫秒内)立即打开数据库的线程。我们推测该问题是由于Windows(或Windows下的sqlite实现)并不总是在关闭文件后立即清理文件资源这一事实造成的。通过在打开时对数据库运行测试写查询来解决此问题(例如,创建然后删除具有愚蠢名称的表)。如果创建/删除失败,我们等待50毫秒,然后重试,重复直到成功或5秒钟。
有效; 显然,只需要有足够的时间将资源刷新到磁盘。
在项目路径中,终端django_project#
sudo chown django:django *