解決QT 中Sqlite資料庫新增加密功能
阿新 • • 發佈:2022-12-07
解決QT 中Sqlite資料庫新增加密功能 是本文要介紹的內容,Sqlite資料庫預設沒有加密功能,對一些需要對工程檔案進行保密的場合產生了不便,本文以QT4.4.3為例,對QT 原始碼中的sql模組進行修改,為qt整合的sqlite資料庫添加了加密功能.
1、 /wxsqlite3_prj/sqlite3目錄 下的檔案進行編譯生成 sqlite3.lib
2、將 sqlite3.h 和 上一步驟生成的sqlite3.lib 拷貝到目錄 ?:/Qt/4.4.3/src/plugins/sqldrivers/sqlite 中.
3、將 ?:/Qt/4.4.3/src/plugins/sqldrivers/sqlite 目錄下的sqlite.pro檔案修改為:
TARGET = qsqlite
# 不使用qt自帶的sqilte原始碼檔案,而是使用外部生成的庫
win32:LIBS += sqlite3.lib
#HEADERS = ../../../sql/drivers/sqlite/qsql_sqlite.h
SOURCES = smain.cpp /
../../../sql/drivers/sqlite/qsql_sqlite.cpp
!system-sqlite:!contains( LIBS, .*sqlite.* ) {
CONFIG(release, debug|release):DEFINES *= NDEBUG
DEFINES += SQLITE_CORE SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE
# INCLUDEPATH += ../../../3rdparty/sqlite
# SOURCES += ../../../3rdparty/sqlite/sqlite3.c
} else {
LIBS *= $$QT_LFLAGS_SQLITE
QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
}
include(../qsqldriverbase.pri)
4、修改 ?:/Qt/4.4.3/src/sql/drivers/sqlite 目錄下的檔案 qsql_sqlite.cpp
需要修改的函式 bool QSQLiteDriver::open(),函式體修改為:
bool QSQLiteDriver::open(const QString & db, const QString &, const QString &, const QString &, int, const QString &conOpts)
{
if (isOpen())
close();
if (db.isEmpty())
return false;
if (sqlite3_open16(db.constData(), &d->access) == SQLITE_OK) {
sqlite3_busy_timeout(d->access, qGetSqliteTimeout(conOpts));
setOpen(true);
setOpenError(false);
//新增加密功能 "Trucc"為加密密匙,5為密匙長度
sqlite3_key( d->access, "Trucc", 5);
return true;
} else {
setLastError(qMakeError(d->access, tr("Error opening database"),
QSqlError::ConnectionError));
setOpenError(true);
return false;
}
}
5 編譯 ?:/Qt/4.4.3/src/plugins/sqldrivers/sqlite 下的工程, 在目錄 ?:/Qt/4.4.3/plugins/sqldrivers 中生成新增加密功能的sqlite相應庫檔案。