|
|
C++下使用加密版本SQLITE |
作者:洛羽叶 点击率:12059 发布时间:2012-12-19 |
SQLITE支持跨平台、跨语言,是做桌面产品比较合适的轻量级开源文件数据库,最新版本是3.7.15 ,下载位置:http://www.sqlite.org/sqlite-amalgamation-3071500.zip,非商业版本不提供加密功能,但有相应的第三方开源类库已经实现了加密功能。通常的方案是在C++下使用加密SQLITE库,.NET语言使用时进行封装,.NET下的SQLITE加密方式是不兼容的。
wxSQLite3除了封装SQLITE以外,还实现了一个SQLITE加密版本,wxSQLite3的最新版本是3.0.1,支持SQLITE 3.7.14.1。
首先下载wxSQLite3:http://sourceforge.net/projects/wxcode/files/Components/wxSQLite3/wxsqlite3-3.0.1.zip/download
解压后获取wxsqlite3-3.0.1\sqlite3\secure\src下所有文件。
新建C++ SDK DLL工程SQLITE3,加入预处理:
SQLITE_HAS_CODEC=1
CODEC_TYPE=CODEC_TYPE_AES128
SQLITE_CORE
THREADSAFE
SQLITE_SECURE_DELETE
SQLITE_SOUNDEX
SQLITE_ENABLE_COLUMN_METADATA
只把sqlite3secure.c包含在工程中,不使用预编译头。
在sqlite3.c及sqlite3secure.c文件头部加入:
#ifndef SQLITE_API
#define SQLITE_API __declspec(dllexport)
#endif
#ifndef SQLITE_HAS_CODEC
#define SQLITE_HAS_CODEC
#endif
在sqlite3.h头部加入(根据使用方法不同,此步骤并非必要):
#ifndef SQLITE_API
#define SQLITE_API __declspec(dllimport)
#endif
#ifndef SQLITE_HAS_CODEC
#define SQLITE_HAS_CODEC
#endif
使用方引用sqlite3.h及sqlite3.lib
int result=0;
sqlite3 *db=NULL;
result=sqlite3_open("c:\test.db",&db);
result=sqlite3_key(db,"abcd",3); //使用密码,第一次为设置密码
//result=sqlite3_rekey(db,NULL,0); //清空密码
result=sqlite3_exec(db,"PRAGMA synchronous = OFF",0,0,0); //提高性能
result=sqlite3_exec(db,"PRAGMA cache_size = 8000",0,0,0); //加大缓存
result=sqlite3_exec(db,"PRAGMA count_changes = 1",0,0,0); //返回改变记录数
result=sqlite3_exec(db,"PRAGMA case_sensitive_like = 1",0,0,0); //支持中文LIKE查询
result=sqlite3_exec(db,"CREATE TABLE [MyTable] ([ID] INTEGER PRIMARY KEY NOT NULL,[MyText] TEXT NULL)",0,0,0);
result=sqlite3_exec(db,"INSERT INTO MyTable (MyText) VALUES ('测试!')",0,0,0);
result=sqlite3_close(db);
|
|
|
|
|
|