董淳光之SQLITE3 使用總結 5

2021-09-25 20:04:30 字數 1487 閱讀 6571

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...