sqlite数据库被锁
‘壹’ php连接sqlite时提示可能被加密或者不是个数据库文件
会不会是文件权限的问题呀
因为你编辑后可能改变了对应的权限
google了一下
You probably have a conflict between a Sqlite v2 database that you try to access with the v3 tool.
‘贰’ 如何对 加密的sqlite数据库文件解密
给SQLite数据库加密解密的方法:
1、创建空的sqlite数据库。
//数据库名的后缀你可以直接指定,甚至没有后缀都可以
//方法一:创建一个空sqlite数据库,用IO的方式
FileStream
fs
=
File.Create(“c:\\test.db“);
//方法二:用SQLiteConnection
SQLiteConnection.CreateFile(“c:\\test.db“);
创建的数据库是个0字节的文件。
2、创建加密的空sqlite数据库
//创建一个密码为password的空的sqlite数据库
SQLiteConnection.CreateFile(“c:\\test2.db“);
SQLiteConnection
cnn
=
new
SQLiteConnection(“Data
Source=c:\\test2.db“);
SQLiteConnection
cnn
=
new
SQLiteConnection(“Data
Source=D:\\test2.db“);
cnn.Open();
cnn.ChangePassword(“password“);
3、给未加密的数据库加密
SQLiteConnection
cnn
=
new
SQLiteConnection(“Data
Source=c:\\test.db“);
cnn.Open();
cnn.ChangePassword(“password“);
4、打开加密sqlite数据库
//方法一
SQLiteConnection
cnn
=
new
SQLiteConnection(“Data
Source=c:\\test2.db“);
cnn.SetPassword(“password“);
cnn.Open();
//方法二
SQLiteConnectionStringBuilder
builder
=
new
SQLiteConnectionStringBuilder();
builder.DataSource
=
@”c:\test.db“;
builder.Password
=
@”password“;
SQLiteConnection
cnn
=
new
SQLiteConnection(builder.ConnectionString);
cnn
.Open();
除了用上述方法给SQLite数据库加密以外,您还可以使用专业的文件加密软件将SQLite数据库加密。
超级加密
3000采用先进的加密算法,使你的文件和文件夹加密后,真正的达到超高的加密强度,让你的加密数据无懈可击。
超级加密3000使用起来,只要点击需要加密的文件的右键,即可轻松实现文件的加密。
解密只要双击已加密文件,输入密码即可轻松搞定。
‘叁’ sqlite 出现 data locked 是什么原因
unable to close e to unfinalised statements,Qt的SQL模块的问题
unable to close e to unfinalised statements,Qt的SQL模块的问题
造成“unable to close e to unfinalised statements”错误的原因有狠多,本座这里说的是QT的问题。
SQLITE要求,在关闭数据库之前,所有活跃的查询都要终结掉。如果在终结掉那些查询之前就关闭数据库,则关闭操作会失败,并且得到“unable to close e to unfinalised statements”这样的错误。
QT的SQLITE驱动有漏洞,API并没有提供对应的函数来让程序猿显式地终结那些活跃状态的查询对象,而用来关闭数据库连接的
QSqlDatebase::close函数又不做这些终结操作。这样就导致某些(其实狠频繁地出现)情况下无法关闭SQLITE数据库,文件描述符被继
续占用着。而再又打开SQLITE数据库的话,又增加咯程序打开的文件描述符的数量,并且也不能关闭。如此下去,直到文件描述符达到系统限制,终于无法再
连接到SQLITE数据库咯。本座今天碰到的就是这样的问题,从/proc伪文件系统中看到自己的程序打开咯1024个文件,其中绝大部分都是某个
SQLITE数据库文件。
参考这里:https://codereview.qt-project.org/#change,20121
据说QT开发者在QT4.8.2中已经解决咯这个问题,有条件的哥哥们可以升级到QT4.8.2试试,本座目前用的是QT4.8.1,要等到QtSDK中的QT版本升级到4.8.2才能升级。像本座这样没条件升级的哥哥就要用另外的办法来绕过咯。
要绕过也简单,对于同一个SQLITE数据库,在程序中打开一个SQLITE数据库连接之后,一直用这个连接,不再关闭,到最后程序退出的时候再关闭SQLITE连接。那个时候,在关闭之前销毁所有存在的查询对象,就可以正常关闭SQLITE数据库咯。
总之,在升级到QT4.8.2之前,不要频繁关闭SQLITE数据库,那是无用功。
SQLite做为客户端应该很给力,但如果做为服务端应用,在并发处理上会伤感情的。