作者:腾云溪牛_556 | 来源:互联网 | 2023-09-13 19:19
最近用到SQLite数据库,刚开始想用ADO来搞,毕竟经常用,结果发现还挺麻烦,要装SQLite的ODBC驱动,装了以后还是连不上,听说这SQLite是开源项目,可以将开发库引入项目来
最近用到SQLite数据库,刚开始想用ADO来搞,毕竟经常用,结果发现还挺麻烦,要装SQLite的ODBC驱动,装了以后还是连不上,听说这SQLite是开源项目,可以将开发库引入项目来直接操作,就在网上找了找对应封装好的库来使用(么办法,不想造轮子,况且网上的大牛多得是,人家造的肯定比自己好),找到了codeproject上的CppSQLite3这个封装库,看了看带的例子,迅速就可以上手使用,效果还不错。貌似,一切都是那么美好。忽然想到一个问题,这数据库没有密码吗?谁都可以访问吗?当然不可能,好吧,网上继续搜,sqlite3_key和sqlite3_rekey这两个函数出现了。然而我们的CppSQLite3封装类中没有这两个东西,几经折腾才知道SQLite3发布版中没有实现加密,又听说有个wxSQlite版可以,就下载下来,直接编译,提示几个头文件找不到,一查才知道还要安装什么wxWidgets,哎最烦这种动不动就要安装个什么东西的了。继续找,不经意间,发现一篇文章,很轻松的就编译出了带加密功能的sqlite库,再配合我们的CppSQLite3就完美了(什么?怎么配合?直接把原有的sqlite3.h,lib,dll替换成我们下边编译的就好啦)。好了,说了一堆废话,下边切入正题。
SQLite 3开源发布版不带加密功能,导出头文件中有sqlite3_key和sqlite3_rekey的定义,注释中说没有对应的实现(有加密实现的版本还需要在预编译中定义预处理宏SQLITE_HAS_CODEC才能开启这几个函数的功能)。因此,需要借助另一个sqlite3加强的开源项目wxSQLite3。
1:首先在这里下载wxSQLite3源码
https://github.com/utelle/wxsqlite3/releases
以3.3.5.3版本为例,其目录中.\sqlite3\secure\src下是实现加密所需的源代码。
2 新建一个“WIN32控制台应用程序”工程,以vs2013为例创建。项目名称为sqlite3,不勾选“预编译头”选项。点击“完成”。
3将下载的源代码.\sqlite3\secure\src中的文件都拷贝到新建的工程目录下。只将sqlite3.def 和sqlite3secure.c添加到项目中.注意不要添加其他文件。
4.在工程属性中,加入预定义宏
SQLITE_ENABLE_RTREE,SQLITE_ENABLE_COLUMN_METADATA,SQLITE_HAS_CODEC=1,SQLITE3ENCRYPT_EXPORTS,SQLITE_ENABLE_FTS3,SQLITE_ENABLE_FTS3_PARENTHESIS,SQLITE_SECURE_DELETE,SQLITE_SOUNDEX,CODEC_TYPE=CODEC_TYPE_AES128。
5接下来,修改项目配置类型,就可以编译需要的lib了,
例如:修改配置类型为“静态库(.lib)”编译 lib文件
6编译好后,就可以将其sqlite3.h, sqlite3.lib引入到要使用的项目上即可。也可以修改配置类型为“动态库(.dll)”同时在属性的“链接器”->“输入”->“模块定义文件”中填写“sqlite3.def”,这样在生成dll的同时会生成一个lib(较之之前的lib小很多,不过这样的链接方式,应用程序发布时要带上这个dll)。这样编译的版本就可以使用sqlite3_key和sqlite3_rekey函数对数据库进行加密了。