采用上一节的方法为SQLite添加了加密解密功能后,使用方法如下:
1、 在调用sqlite3_open()函数打开数据库后,要调用sqlite3_key()函数为数据库设置密码;
2、 如果数据库之前有密码,则调用sqlite3_key()函数设置正确密码才能正常工作;
3、 如果一个数据库之前没有密码,且已经有数据,则不能再为其设置密码;
4、 如果要修改密码,则需要在第一步操作后,调用sqlite3_rekey()函数设置新的密码;
5、 设置了密码的SQLite数据库,无法使用第三方工具打开;
具体使用的示例代码如下:
|
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define SQLITE3_STATIC
extern int sqlite3_key(sqlite3 *db,const void *pKey,int nKey);
static int _callback_exec(void * notused,int argc,char ** argv,char ** aszColName)
{
int i;
for ( i=0; i<argc; i++ )
{
printf( "%s = %srn",aszColName[i],argv[i] == 0 ? "NUL" : argv[i] );
}
return 0;
}
int main(int argc,char * argv[])
{
const char * sSQL;
char * pErrMsg = 0;
int ret = 0;
sqlite3 * db = 0;
//创建数据库
ret = sqlite3_open("d:encrypt.db",&db);
//添加密码
ret = sqlite3_key( db,"dcg",3 );
//在内存数据库中创建表
sSQL = "create table class(name varchar(20),student);";
sqlite3_exec( db,sSQL,_callback_exec,&pErrMsg );
//插入数据
sSQL = "insert into class values('mem_52911','zhaoyun');";
sqlite3_exec( db,"sans-serif";
mso-ascii-font-family:Consolas;mso-hansi-font-family:Consolas;mso-bidi-font-family:
Consolas;color:#3F7F5F">取得数据并显示
sSQL = "select * from class;";
sqlite3_exec( db,"sans-serif";
mso-ascii-font-family:Consolas;mso-hansi-font-family:Consolas;mso-bidi-font-family:
Consolas;color:#3F7F5F">关闭数据库
sqlite3_close(db);
db = 0;
return 0;
}