最近用到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函数对数据库进行加密了。

使用CppSQLite3封装结合wxSQLite实现加密版的SQLite数据库操作类相关推荐

  1. 小博老师解析Java核心技术 ——JDBC数据库操作类封装

    2019独角兽企业重金招聘Python工程师标准>>> [引言] 我们在学习Java编程时,连接数据库技术(JDBC)是一项必备技能,我们经常需要读取或操作持久性存储的结构化数据.那 ...

  2. php封装数据库操作类,php简单数据库操作类的封装

    本文实例为大家分享了php封装一个简单的数据库操作类,供大家参考,具体内容如下 一.代码 class conndb{ private $local; private $username; privat ...

  3. php操作mysql的封装类_PHP封装的mysqli数据库操作类示例

    本文实例讲述了PHP封装的mysqli数据库操作类.分享给大家供大家参考,具体如下: 由于PHPMySQL操作在PHP5.4以下被弃用而推荐使用mysqli(MySQL Improvement),这里 ...

  4. php精辟代码欣赏,数据库操作类,封装所有数据库操作

    下面是php各种代码库,个人分享 <?php //******************************************************************* //此处 ...

  5. 封装一个通用的数据库操作类

    最近写一个项目,我开发的方式首先设计数据库,然后用网上免费的代码生成软件CodePlus V2.0生成mode对象,同时封装操作方法,在与数据库操作方面我封装了一个数据操作类,很方便,贡献出来. Co ...

  6. Qt sqlite 数据库操作封装

    封装接口: 1.生成数据库文件 2.打开数据库 3.关闭数据库 4.执行Sql语句 5.增删改查的实现及重载接口 6.事务操作:taransction和commit 直接贴代码 sqliteDb.h ...

  7. php pdo 支持mysql表类型_全新的PDO数据库操作类php版(仅适用Mysql)

    复制代码 代码如下: /** * 作者:胡睿 * 日期:2012/07/21 * 电邮:hooray0905@foxmail.com */ class HRDB{ protected $pdo; pr ...

  8. Delphi纯代码连SQLite数据库,同时支持数据库的加密解密

    //摘自:http://bbs.witbase.com/thread-1141-1-1.html Delphi纯代码连SQLite数据库,同时支持数据库的加密解密 Delphi纯代码连SQLite数据 ...

  9. 在C#中,如何连接已加密的Sqlite数据库

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密, 如果SQLite数据库加密,我这里使用的一个管理工具叫SQLiteDeveloper,如下就可以加密数据库 , 如果在 ...

最新文章

  1. ubuntu 下mysql导入出.sql文件
  2. 如何用CMD递归查看Windows中文件夹结构 也叫做树形结构!
  3. 疫情之后,出行市场的春天还有多远?
  4. 【Linux开发】Linux下jpeglib库的安装详解
  5. 商品管理到底重不重要?
  6. 程序员必须知道的HTML常用代码有哪些?
  7. mediawiki mysql_MediaWiki
  8. BSTR与CString之前的转换
  9. Android 网络开发框架的选择
  10. ubuntu20.04安装MySQL、卸载MySQL命令
  11. 停车小程序,智能停车场小程序,智能停车源码
  12. html表单 当前年月日_HTML5表单
  13. debian 11修改ip地址的方法
  14. mysql increment_mysql中auto_increment是干什么的?
  15. 万台服务器一人挑的奥秘
  16. 群辉默认DDNS功能解析阿里云-自定义服务商
  17. 蓝桥杯 兰顿蚂蚁【模拟】
  18. 增大 MAT 堆内存
  19. Eureka相关总结
  20. 意大利与比利时的决胜时刻

热门文章

  1. 计算机与科学论文3000,计算机科学技术应用论文3000字(2)
  2. 架构师学习笔记14--信息系统基础知识
  3. Tekla-InpEditor inp文件编辑器
  4. 高松:企业的经营过程本身就是学习
  5. Photoshop 2018 学习笔记 1.2 PS工作界面
  6. ThinkPad.E440_安装固态硬盘
  7. 史上最易懂AP、mAP计算解析
  8. matlab循环语句从小到大排列,三个例子讲解MATLAB三种循环
  9. Windows7中创建逻辑驱动器(扩展分区)
  10. python晋江文学城数据分析——标签关联规则分析(Apriori算法+R语言)