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做為客戶端應該很給力,但如果做為服務端應用,在並發處理上會傷感情的。