QtSqlite加密
上次说了QxOrm的数据库连接、映射和基础的增删改查,但是我们在使用数据库的时候并不希望别人看到我们数据库的内容,我们希望我们的数据库是能被加密的,只有我们用正确的密码才能连接上我们的数据库。加密之后就可以对数据安全作出一定的保障。
sqlite官方带加密版本的是要收费的,这个时候就不得不推荐一个项目
● QtCipherSqlitePlugin
该项目是一个QT的加密Sqlite数据库的插件,编译特别简单,直接使用QtCreator打开编译即可。所以不介绍编译了,直接介绍该插件的使用吧。
第一步:环境准备
虽然没有介绍编译,但是我们编译出来的库是需要拷贝到Qt安装目录下的
将sqlitecipher.dll 和 sqlitecipherd.dll 拷贝到安装目录下的$path$\5.15.2\msvc2019_64\plugins\sqldrivers文件夹下,之后我们就可以正常使用该方式创建sqlite数据库了。
第二步:连接数据库
我们之前直接使用的时候是直接使用QSQLITE去连接的,这里我们使用新的SQLITECIPHER类型,在此之前你可以先使用 QSqlDatabase::drivers() 查看是否支持,如果不支持,请重新进行环境准备步骤
我这里输出的是QSQLITE QODBC QODBC3 QPSQL QPSQL7 SQLITECIPHER
void databaseInit() { for(const auto &a : QSqlDatabase::drivers()) { std::cout << a.toStdString() << " "; } std::cout << std::endl; qx::QxSqlDatabase::getSingleton()->setDriverName("SQLITECIPHER"); qx::QxSqlDatabase::getSingleton()->setDatabaseName("./demo.db"); qx::QxSqlDatabase::getSingleton()->setPassword("1234"); }
这里应该直接看函数名称就可以看懂,不需要进行详细的解释。
第三步:数据库操作
像之前一样直接进行数据操作,这里不做详细介绍。增删改查就可以。
我贴出代码,你们自己测试即可
#include <QApplication> #include <QApplication> #include "precompiled.h" #include "person.h" #include "author.h" #include "author2.h" #include "turbo_log.h" void databaseInit() { for(const auto &a : QSqlDatabase::drivers()) { std::cout << a.toStdString() << " "; } std::cout << std::endl; qx::QxSqlDatabase::getSingleton()->setDriverName("SQLITECIPHER"); qx::QxSqlDatabase::getSingleton()->setDatabaseName("./demo.db"); qx::QxSqlDatabase::getSingleton()->setPassword("1234"); } void createTable() { QSqlError daoError = qx::dao::create_table<person>(); if (daoError.type() != QSqlError::NoError) { TurboLog::instance().getConsoleLogger()->error("Table person:" + daoError.text().toStdString()); } daoError = qx::dao::create_table<author>(); if (daoError.type() != QSqlError::NoError) { TurboLog::instance().getConsoleLogger()->error("Table author:" + daoError.text().toStdString()); } daoError = qx::dao::create_table<author2>(); if (daoError.type() != QSqlError::NoError) { TurboLog::instance().getConsoleLogger()->error("Table author2:" + daoError.text().toStdString()); } } void insertData() { person p; p.firstName = "王五"; p.lastName = "王五2"; p.birthDate = QDateTime::fromString("1996-04-25", "yyyy-MM-dd"); p.age = 23; QSqlError daoError = qx::dao::insert(p); daoError = qx::dao::insert(p); daoError = qx::dao::insert(p); daoError = qx::dao::insert(p); daoError = qx::dao::insert(p); if (daoError.type() != QSqlError::NoError) { TurboLog::instance().getConsoleLogger()->error("insert update:" + daoError.text().toStdString()); } } void selectData() { QList<person> persons; qx::dao::fetch_all(persons); TurboLog::instance().getConsoleLogger()->error("select table:{}", persons.size()); } void deleteData() { // person p; // qx_query query; // query.where("id").isEqualTo(2); QSqlError daoError = qx::dao::destroy_all<person>(); if (daoError.type() != QSqlError::NoError) { TurboLog::instance().getConsoleLogger()->error("delete persons:" + daoError.text().toStdString()); } // qx_query query2; // query2.where("id").isEqualTo(1); // daoError = qx::dao::destroy_by_query<person>(query2); // if (daoError.type() != QSqlError::NoError) // { // TurboLog::instance().getConsoleLogger()->error("delete persons:" + daoError.text().toStdString()); // } } int main(int argc, char **argv) { QApplication app(argc, argv); databaseInit(); insertData(); // selectData(); // deleteData(); return app.exec(); }
第四步:使用新的可视化工具查看数据库数据
这里我们再使用DBeaver查看数据库的时候已经无法查看了,因此我们需要使用新的软件去查看数据库。
推荐软件:
● SQLiteStudio
该软件是开源的QT写的数据库查看工具,操作起来像Navicate(个人感觉),因此上手不难。我们就介绍如何连接到我们加密好的数据库吧。
如上图所示,我们先点击数据库 → 然后点击添加数据库→ 到数据类型我们选择WxSqlite3→ 选择数据库,输入密码→ 加密算法选择sqlsheet那个→ 点击测试连接(如果通过则显示一个对号)→ 输入sql语句进行数据查询。