/***
下面是編譯時提示缺少的函式***/
/**
這個函式不需要做任何處理,獲取金鑰的部分在下面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 檢視資料庫檔案資訊命令 注意...