带有加密功能的 SQLite Qt 插件(v0.2)

前面的文章中,曾经实现了一个带有加密功能的 SQLite Qt 插件。由于 Qt5 的发布,原来的代码已经不能通过编译,而且先前的实现因为只是演示性质,所以是将密码硬编码在代码中。现在,豆子更新了代码,使其能够运行于 Qt5。欢迎需要使用的童鞋下载~

本次更新,将代码结构做了调整,但是整体实现没有改变(详见前面的文章)。同时,将 sqlite 的版本升级为 3.7.15.1。

现在我们有两个子文件夹:sqlitecipher 和 test,前者是插件的全部代码,后者是一个简单的测试程序。

本次编译比之前要简单得多。编译之前,需要打开 sqlitecipher/qt_p.pri 文件,设置 Qt 的代码位置:

# Qt4
!greaterThan(QT_MAJOR_VERSION, 4): INCLUDEPATH += D:/Develop/Qt/4.8.4/src/sql/kernel

# Qt5
greaterThan(QT_MAJOR_VERSION, 4): INCLUDEPATH += D:/Develop/Qt/5.0.0/5.0.0/Src/qtbase/src/sql/kernel

第一行是 Qt4 的代码位置,第二行是 Qt5 的代码位置。这里的代码目录一般会到 sql/kernel 一层,目的是找到包含有 qsqlcachedresult_p.h 的文件夹。因此,只需要能够找到这个文件即可。

接下来,只需要打开 sqlitecipher 中的 sqlitecipher.pro 进行编译即可,无需单独编译 sqlite 库。编译过后,Qt4 需要将生成的 sqlitecipher.dll 和 sqlitecipher.lib,Qt5 需要将生成的 sqlitecipher.dll 复制到 Qt 的 plugins/sqldrivers 文件夹下。

正如前面所说,我们还是使用了 SQLITECIPHER 作为插件的名字。如果需要修改这个名字,Qt4 需要修改 smain.cpp 中的 DriverName 定义,Qt5 需要修改 SqliteCipherDriverPlugin.json 中的 SQLITECIPHER 一行。

本次更新除了支持 Qt5,还修改了open()函数,具体是在 qsql_sqlite.cpp 的 564 行。上一版本,我们将密码硬编码到文件中,现在我们则使用了open()函数的password参数。注意,由于此处的password应该使用

dbconn.setPassword("Trucc");

传递进来,详细示例代码可以参考 test/main.cpp。

按照老规矩,这里是全部打包文件。如果需要,则可以到 github 上面获取 git 库。

Comments (36)

  1. vintx 2013年1月11日
    • 豆子 2013年1月11日
  2. 精英王子 2013年1月12日
    • 豆子 2013年1月13日
      • 精英王子 2013年1月13日
        • 豆子 2013年1月14日
          • 死机不死 2013年1月15日
          • 死机不死 2013年1月15日
          • 豆子 2013年1月16日
  3. 死机不死 2013年1月15日
  4. adai 2013年7月18日
    • 豆子 2013年7月19日
  5. 阿土 2013年7月22日
    • 豆子 2013年7月22日
      • 阿土 2013年7月22日
        • 豆子 2013年7月23日
  6. 阿土 2013年7月22日
  7. 阿土 2013年7月31日
    • 豆子 2013年7月31日
  8. 阿土 2013年8月3日
    • 豆子 2013年8月4日
  9. 496393411@qq.com 2014年8月5日
    • 豆子 2014年8月5日
  10. fc88 2014年9月16日
  11. 2015年6月23日
    • 豆子 2015年6月29日
  12. Novisign 2015年9月23日
  13. stlcours 2016年1月8日
    • 豆子 2016年1月9日
  14. 月伴星辰 2016年2月20日
    • 豆子 2016年2月22日
  15. FranklinFoong 2016年5月10日
  16. ll 2016年5月11日
  17. 大鹏 2016年8月25日
  18. 森仔 2018年1月2日

Leave a Reply