基於嵌入式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頁面