基于嵌入式Qt-4.7.0版本加密数据库sqlite3的插件方法
参考博客:https://www.devbean.net/2013/01/qt-sqlite-plugin-with-encryption-v02/下载源码:https://github.com/devbean/QtCipherSqlitePlugin
一:编译
(1)使用qtcretor打开下载的源码,并配置构建套件
因为我的版本偏低所以有几个错误:
erorr1[sqlitecipher 68line]
以前:int result = sqlite3_exec(d->access, QString("SELECT count(*) FROM sqlite_master LIMIT 1").toUtf8().constData(), nullptr, nullptr, nullptr); \
修改:int result = sqlite3_exec(d->access, QString("SELECT count(*) FROM sqlite_master LIMIT 1").toUtf8().constData(), NULL, NULL, NULL); \
把所有nullptr替换为NULL
erorr2[sqlitecipher 467line]
const QString str = dateTime.toString(QStringLiteral("yyyy-MM-ddThh:mm:ss.zzz"));
const QString str = dateTime.toString("yyyy-MM-ddThh:mm:ss.zzz");
去掉所有QStringLiteral
const int nt = option.midRef(21).toInt(&ok);
const int nt = option.mid(21).toInt(&ok);
midRef由mid替换
最后编译通过
二 拷贝生成libsqlitecipher.so到你qt的安装目录一般是/usr/local/Trolltech/Qt-4.7.0/plugins/sqldrivers
sudo cp libsqlitecipher /usr/local/Trolltech/Qt-4.7.0/plugins/sqldrivers
三 验证加密和修改密码和删除密码
参考下载源码下test,运行之后生成的数据库为二进制,打开错误(1)为已经存在数据库的加密
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");
dbconn.setDatabaseName("test.db");
dbconn.setPassword("test");
dbconn.setConnectOptions("QSQLITE_CREATE_KEY");
(2)删除密码
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");
dbconn.setDatabaseName("test.db");
dbconn.setPassword("test");
dbconn.setConnectOptions("QSQLITE_REMOVE_KEY");
(3)修改密码
QSqlDatabase dbconn = QSqlDatabase::addDatabase("SQLITECIPHER");
dbconn.setDatabaseName("test.db");
dbconn.setPassword("test"); // the old password
dbconn.setConnectOptions("QSQLITE_UPDATE_KEY=newtest"); // set new password
以上这些都可以参考github源码的wiki页面