将SQLite数据库模式更改为可读写

如何将SQLite数据库从只读更改为读写?

当我执行更新声明时,我总是得到:

SQL错误:试图写一个只读数据库

SQLite文件是文件系统上的可写文件。

这个错误信息可能有几个原因:

  • 有几个进程同时打开数据库( 参见FAQ )。

  • 有一个插件来压缩和encryption数据库。 它不允许修改数据库。

  • 最后, 另一个FAQ说:“确保包含数据库文件的目录也可以写入执行CGI脚本的用户。” 我想这是因为引擎需要在目录中创build更多的文件。

如果使用Android。

确保你已经添加了写入你的EXTERNAL_STORAGE的权限到你的AndroidManifest.xml

将此行添加到您的<application>标记之上和之外的AndroidManifest.xml文件中。

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

这将允许您的应用程序写入SD卡。 如果您的EXTERNAL_STORAGE是您将数据库存储在设备上的地方,这将有所帮助。

我通过将所有者从根目录更改为/ db目录上的所有文件来解决此问题。

只要在该文件夹上执行ls -l ,如果任何文件pipe理器由root拥有,只需将其更改为你,使用: sudo chown user file

我今天也有这个问题。

它是由Windows Mobile上的ActiveSync造成的 – 我工作的文件夹被同步,因此AS进程不时抓住数据库文件导致这个错误。

在Linux命令行程序中,我做了:

 chmod 777 <db_folder> 

其中包含数据库文件。

有用。 现在我可以访问我的数据库并进行插入查询。

从命令行input数据库文件所在的文件夹并执行以下命令:

 chmod 777 databasefilename 

这将授予所有用户的所有权限。

当您的数据库已经被一个应用程序访问时,通常会发生这个错误,而您正尝试使用另一个数据库访问它。

在Linux上,给包含数据库文件的整个文件夹提供读/写权限。

另外,SELinux可能会阻止写入。 您需要设置正确的权限。

在我的SELinuxpipe理界面(在Fedora 19上),我在标有httpd_unified(Unify HTTPD处理所有内容文件)的行上勾选了一个框,我很高兴。

在Windows上:

tl; dr:尝试再次打开文件。

我们的系统遇到了这个问题,而且这绝对不是一个权限问题,因为程序本身可以在大多数时间从多个线程中打开数据库,但是偶尔(仅在Windows上,而不是在OSX上),即使程序中的所有其他线程都没有问题,线程也会得到这些错误。

我们最终发现那些失败的线程只是在另一个线程closures之后(3毫秒内)试图打开数据库的线程。 我们推测这个问题是由于Windows(或windows下的sqlite实现)在closures文件时并不总是立即清理文件资源。 我们通过在打开时对数据库运行testing写查询来解决这个问题(例如,创build一个愚蠢的名字,然后删除一个表)。 如果创build/删除失败,我们等待50毫秒,然后重试,重复,直到成功或5秒过去。

有效; 显然只需要有足够的时间将资源刷新到磁盘。

编辑数据库:编辑数据库时遇到问题。 我结束了不得不
sudo chown'非root用户名'ts3server.sqlitedb
只要它不是根,我可以编辑文件。 用户名是我的非根帐户的用户名。

自动启动TeamSpeak: 作为你的非root账户
crontab -e
@reboot / ts3server的path/ aka /home/ts3server/ts3server_startscript.sh启动

在Ubuntu上,将所有者更改为Apache组并授予正确的权限(不,不是777):

 sudo chown :www-data <path to db.sqlite3> sudo chown 664 <path to db.sqlite3>