SQLITE3 使用總結 4

2021-04-13 05:18:45 字數 3144 閱讀 7712

/***

下面是編譯時提示缺少的函式***/

/**

這個函式不需要做任何處理,獲取金鑰的部分在下面derivekey 函式裡實現**/

void

sqlite3codecgetkey(sqlite3* db, int ndb, void** key, int* nkey)

/*被sqlite 和sqlite3_key_interop 呼叫, 附加金鑰到資料庫.*/

intsqlite3codecattach(sqlite3 *db, int ndb, const

void *pkey, int nkeylen);

/**

這個函式好像是sqlite

3.3.17

前不久才加的,以前版本的sqlite裡沒有看到這個函式

這個函式我還沒有搞清楚是做什麼的,它裡面什麼都不做直接返回,對加解密沒有影響

**/

void

sqlite3_activate_see(const

char* right )

intsqlite3_key(sqlite3 *db, const

void *pkey, int nkey);

intsqlite3_rekey(sqlite3 *db, const

void *pkey, int nkey);

/***

下面是上面的函式的輔助處理函式

***/

// 從使用者提供的緩衝區中得到乙個加密金鑰

// 使用者提供的金鑰可能位數上滿足不了要求,使用這個函式來完成金鑰擴充套件

static

unsigned

char * derivekey(const

void *pkey, int nkeylen);

//建立或更新乙個頁的加密演算法索引.此函式會申請緩衝區.

static

lpcryptblock createcryptblock(unsigned

char* hkey, pager *pager, lpcryptblock pexisting);

//加密/解密函式, 被pager呼叫

void

* sqlite3codec(void *parg, unsigned

char *data, pgno npagenum, int nmode);

//設定密碼函式

int__stdcall sqlite3_key_interop(sqlite3 *db, const

void *pkey, int nkeysize);

// 修改密碼函式

int__stdcall sqlite3_rekey_interop(sqlite3 *db, const

void *pkey, int nkeysize);

//銷毀乙個加密塊及相關的緩衝區,金鑰.

static

void destroycryptblock(lpcryptblock pblock);

static

void * sqlite**ager_get_codecarg(pager *ppager);

void

sqlite**ager_set_codec(pager *ppager,void *(*xcodec)(void*,void*,pgno,int),void *pcodecarg);

//加密/解密函式, 被pager呼叫

void

* sqlite3codec(void *parg, unsigned

char *data, pgno npagenum, int nmode)

} switch(nmode)

return data;

}

//銷毀乙個加密塊及相關的緩衝區,金鑰.

static

void destroycryptblock(lpcryptblock pblock)

//如果寫金鑰存在並且不等於讀金鑰,也銷毀.

if (pblock->writekey && pblock->writekey != pblock->readkey)

if(pblock->data)

//釋放加密塊.

sqlitefree(pblock);

}

static

void * sqlite**ager_get_codecarg(pager *ppager)

// 從使用者提供的緩衝區中得到乙個加密金鑰

static

unsigned

char * derivekey(const

void *pkey, int nkeylen)

hkey = sqlitemalloc( db_key_length_byte + 1 );

if( hkey == null )

hkey[ db_key_length_byte ] = 0;

if( nkeylen < db_key_length_byte )

else

return hkey;

}

//建立或更新乙個頁的加密演算法索引.此函式會申請緩衝區.

static

lpcryptblock createcryptblock(unsigned

char* hkey, pager *pager, lpcryptblock pexisting)

else

//更新存在的加密塊

}

memset(pblock->data, 0, pblock->pagesize + crypt_offset);

return pblock;

}

/*

** set the codec for this pager

*/

void

sqlite**ager_set_codec(

pager *ppager,

void *(*xcodec)(void*,void*,pgno,int),

void *pcodecarg

)

SQLITE3 使用總結(十)

五 效能優化 很多人直接就使用了,並未注意到sqlite也有配置引數,可以對效能進行調整。有時候,產生的結果會有很大影響。主要通過pragma指令來實現。比如 空間釋放 磁碟同步 cache大小等。不要開啟。前文提高了,vacuum的效率非常低!1 auto vacuum pragma auto v...

使用sqlite3 模組操作sqlite3資料庫

python內建了sqlite3模組,可以操作流行的嵌入式資料庫sqlite3。如果看了我前面的使用 pymysql 操作mysql資料庫這篇文章就更簡單了。因為它們都遵循pep 249,所以操作方法幾乎相同。廢話就不多說了,直接看 吧。都差不多,首先匯入模組,然後建立連線,然後獲取游標物件,之後利...

sqlite3 語句總結

一 sqlite3長用於 輕量級的 資料儲存,象微控制器這一類,但是現在的sqlite3,已經很先進,不能小看 二 sqlite3常用命令 當前目錄下建立或開啟test.db資料庫檔案,並進入sqlite命令終端,以sqlite 字首標識 sqlite3 test.db 檢視資料庫檔案資訊命令 注意...