2011-07-11 58 views
2

我有一個sqlite數據庫,我想打開使用sqlite3.exe。現在,當我嘗試進行查詢時,出現錯誤,提示「文件已加密或不是數據庫」。這可能看起來很愚蠢,但我一直在環顧四周,我只是沒有找到如何提供密碼(或密鑰)到sqlite3.exe來解密數據庫。 sqlite3.exe的-help選項或.help命令不顯示任何內容......是否可以這樣做,如果可以,我該怎麼做?如何爲sqlite3.exe提供密碼?

+0

你確定該文件是一個有效的sqlite數據庫,並沒有損壞? –

+0

我不確定,因爲有人通過電子郵件將它發送給我,但我知道密碼應該是什麼,如果它是一個有效的加密數據庫。這就是爲什麼我想驗證它。如果我向sqlite3提供密碼,並且仍然出現此錯誤,那麼它將會是數據庫已損壞的標誌,但現在我還沒有發現如何提供密碼。 – Carl

+0

那個通過電子郵件發給我的傢伙正在度假2周,所以我不能問他該怎麼做。但他給了我一個密碼,所以我想我的數據庫是加密的。 – Carl

回答

0

數據庫不可能被加密,除非你有理由相信它。你是否可以打開數據庫,或者一旦你發出一些SQL查詢就會得到這個錯誤?如果它是前者,你的文件可能不是一個sqlite數據庫開始,或者它已經損壞;如果是後者,請檢查你的數據庫的完整性:

pragma integrity_check; 

有關此編譯的詳細信息,請參閱http://www.sqlite.org/pragma.html#pragma_integrity_check

在任何情況下,除非你的數據庫真的被加密(sqlite本身不支持),你的數據庫可能是不可用的。

+0

當我發出一些SQL查詢時,我收到錯誤。 SQLite3.exe一開始並沒有抱怨,如果我做sqlite3.exe myDBname.db – Carl

+0

是的抱歉,我忘了sqlite只是不會抱怨,直到它實際上做了什麼與數據庫。你可以檢查該文件,看看它是否看起來加密(如通過打開記事本)? – 2011-07-11 19:03:32

+0

我不知道加密數據庫應該是什麼樣子,但是有很多不可讀的字符,並且不時有我認識的名字(例如數據庫中表的名稱)。 – Carl

0

SQLite在向它傳遞一個文件時報告錯誤,該文件實際上不是SQLite數據庫,或者已被損壞。有幾個支持加密的SQLite插件,但除此之外,SQLite沒有加密。

當您嘗試使用SQLite v2打開SQLite v3數據庫(可能還有其他版本不匹配)時,也會發生這種情況。

假設您經歷過損壞(而不僅僅是傳遞錯誤的文件或使用錯誤版本的SQLite),您可能需要檢查您正在使用的PRAGMA synchronous設置,並且還要查看the list of fixed data-corrupting bugs

0

結帳這個這個forum here。那傢伙和你有同樣的問題。問題在於,沒有任何形式的保護作爲sqlite3 API中的標準包提供,但您可以嘗試System.Data.SQLite。這些是論壇上發佈的代碼:

#include <SQLite.au3> don't include sqlite.dll.au3 !!! 

_SQLite_Startup ("System.Data.SQLite.dll") 
ConsoleWrite(_SQLite_LibVersion() & @LF) 
_SQLite_Open("testcrypt.db") 
_SQLite_Exec(-1, "pragma key = 'Radu is happy!';create table if not exists test (id integer, val text);" & _ 
       "insert into test values (1, 'abc');") 
Local $row 
_SQLite_QuerySingleRow(-1, "select * from test;", $row) 
ConsoleWrite($row[1] & @LF) 
_SQLite_Close() 
_SQLite_Shutdown() 

希望有幫助。

相關問題