最近因为工作原因,需要使用sqlite数据库。sqlite数据库小并且使用方便,感觉挺不错的。但有一个不足就是没有对数据库进行加密,不过好的是sqlite预留有加密的接口,我们可以直接调用即可。我也是参考网上的资料对数据库进行加密:
TARGET = qsqlite
win32:LIBS += sqlite3.lib
#
SOURCES = smain.cpp \
CONFIG(release,debug|release):DEFINES *= NDEBUG
# INCLUDEPATH += ../../../3rdparty/sqlite
} else {
LIBS *= $$QT_LFLAGS_sqlITE
QMAKE_CXXFLAGS *= $$QT_CFLAGS_sqlITE
}
include(../qsqldriverbase.pri)
bool QsqliteDriver::open(const QString & db,const QString &,int,const QString &conOpts)
{
if (isOpen())
close();
if (db.isEmpty())
return false;
setOpen(true);
setOpenError(false);
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
相应库文件.
摘自:http://apps.hi.baidu.com/share/detail/21604459
可当我编译到最后一步的时候,出现了‘sqlite3_key’ was not declared in this scope 的错误信息,我死活不知道为啥,只出现这个错误,sqlite3.h文件也已经进行了引入,可为啥还是出错呢?今天静下心来,阅读sqlite3.h文件的sqlite3_key函数,发现在它的上面有一句
#ifdef sqlITE_HAS_CODEC
我突然若有所思,这句话的意思不就是如果定义了sqlITE_HAS_CODEC才可以使用sqlite3_key函数嘛。既然这样,我们只要在提出错误的文件中进行定义即可。这样我将出现找不到sqlite3_key函数的qsql_sqlite.cpp文件头部加上:
#if defined sqlITE_HAS_CODEC
#endif
重新进行编译,编译通过。
看来遇到问题,还是要就下心来。慢慢的,细心的分析,相信问题总能解决的。