在軟件項目中加入Sunisoft在線更新軟件,用戶監測軟件版本更新時自動檢測和下載新版本軟件。軟件功能比較簡單,主要是對sqlite文件的讀取。但是使用過程中發現只要連接上sqlite數據庫,更新軟件就會認為sqlite數據庫文件已被修改,與服務器上的版本不符,需要更新該文件。通過md5比較,數據庫被打開的時候並沒有做任何修改。後來通過測試發現,只要文件被通過可寫的方式打開,Sunisoft軟件就會認為文件已經被修改,即使打開之後不做寫操作。 找到原因,接下來就容易解決了。由於軟件不需要對sqlite文件進行些操作,主要都是查詢操作,因此可以以只讀方式連接sqlite數據庫。sqlite3提供只讀方式打開文件接口。 [cpp] int sqlite3_open_v2( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb, /* OUT: SQLite db handle */ int flags, /* Flags */ www.2cto.com const char *zVfs /* Name of VFS module to use */ ); 第一個參數為數據庫文件路徑,第二個參數是輸出參數,為數據庫操作指針地址。第三個參數為數據庫訪問方式,可通過此參數配置只讀方式打開數據庫,可以是SQLITE_OPEN_READONLY,SQLITE_OPEN_READWRITE和SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE中的一個,用於控制數據庫的打開方式,可以和SQLITE_OPEN_NOMUTEX,SQLITE_OPEN_FULLMUTEX, SQLITE_OPEN_SHAREDCACHE,以及SQLITE_OPEN_PRIVATECACHE結合使用。第四個參數zVfs允許客戶應用程序命名一個虛擬文件系統(Virtual File System)模塊,用來與數據庫連接。VFS作為SQlite library和底層存儲系統(如某個文件系統)之間的一個抽象層,通常客戶應用程序可以簡單的給該參數傳遞一個NULL指針,以使用默認的VFS模塊。