int sqlite3_key(sqlite3 *db, const
void *pkey, int nkey)
int sqlite3_rekey(sqlite3 *db, const
void *pkey, int nkey)
/*被sqlite 和 sqlite3_key_interop 呼叫, 附加金鑰到資料庫.*/
int sqlite3codecattach(sqlite3 *db, int ndb, const
void *pkey, int nkeylen)
else
//附加資料庫,使用主資料庫的金鑰.
}else
//使用者提供了密碼,從中建立金鑰.
//建立乙個新的加密塊,並將解碼器指向新的附加資料庫.
if (hkey)
return rc;
}// changes the encryption key for an existing database.
int__stdcall sqlite3_rekey_interop(sqlite3 *db, const
void *pkey, int nkeysize)
else
// 改變已加密資料庫的寫金鑰
// 開始乙個事務
rc = sqlite3btreebegintrans(pbt, 1);
if (!rc)}}
// 如果成功,提交事務。
if (!rc)
// 如果失敗,回滾。
if (rc)
// 如果成功,銷毀先前的讀金鑰。並使讀金鑰等於當前的寫金鑰。
if (!rc)
pblock->readkey = pblock->writekey;
}else
// 如果失敗,銷毀當前的寫金鑰,並恢復為當前的讀金鑰。
pblock->writekey = pblock->readkey;
}//
如果讀金鑰和寫金鑰皆為空,就不需要再對頁進行編譯碼。
// 銷毀加密塊並移除頁的編解碼器
if (!pblock->readkey && !pblock->writekey)
return rc;
}/***
下面是加密函式的主體
***/
int__stdcall sqlite3_key_interop(sqlite3 *db, const
void *pkey, int nkeysize)
// 釋放與乙個頁相關的加密塊
void sqlite3pager_free_codecarg(void *parg)
#endif
//#ifdef sqlite_has_codec
寫此教程,可不是乙個累字能解釋。
但是我還是覺得欣慰的,因為我很久以前就想寫 sqlite 的教程,一來自己備忘,二而已造福大眾,大家不用再走彎路。
本人第一次寫教程,不足的地方請大家指出。
董淳光 SQLITE3 使用總結(1)
sqlite3 的確很好用。小巧 速度快。但是因為非微軟的產品,幫助文件總覺得不夠。這些天再次研究它,又有一些收穫,這裡把我對 sqlite3 的研究列出來,以備忘記。這裡要註明,我是乙個跨平台專注者,並不喜歡只用 windows 平台。我以前的工作就是為 unix 平台寫 下面我所寫的東西,雖然沒...
SQLITE3 使用總結 4
下面是編譯時提示缺少的函式 這個函式不需要做任何處理,獲取金鑰的部分在下面derivekey 函式裡實現 void sqlite3codecgetkey sqlite3 db,int ndb,void key,int nkey 被sqlite 和sqlite3 key interop 呼叫,附加金鑰...
SQLITE3 使用總結(十)
五 效能優化 很多人直接就使用了,並未注意到sqlite也有配置引數,可以對效能進行調整。有時候,產生的結果會有很大影響。主要通過pragma指令來實現。比如 空間釋放 磁碟同步 cache大小等。不要開啟。前文提高了,vacuum的效率非常低!1 auto vacuum pragma auto v...