reademe.txt 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. 【如何在QT环境下编译支持加密功能的SQLITE】
  2. 1、下载wxsqlite3-3.0.0.1.zip
  3. 2、复制上述压缩包中的文件到qt源码
  4. 将 sqlite3.h 和 上一步骤生成的sqlite3.lib 拷贝到目录
  5. wxsqlite3-3.0.0.1.zip\wxsqlite3-3.0.0\sqlite3\secure\aes128\dll\release\sqlite3.lib qt/src/plugins/sqldrivers/sqlite
  6. wxsqlite3-3.0.0.1.zip\wxsqlite3-3.0.0\sqlite3\include\sqlite3.h qt/src/plugins/sqldrivers/sqlite
  7. 3、qt/src/plugins/sqldrivers/sqlite 目录下的sqlite.pro文件修改为:
  8. TARGET = qsqlite
  9. # 不使用qt自带的sqilte源码文件,而是使用外部生成的库
  10. win32:LIBS += sqlite3.lib
  11. #
  12. HEADERS = ../../../sql/drivers/sqlite/qsql_sqlite.h
  13. SOURCES = smain.cpp /
  14. ../../../sql/drivers/sqlite/qsql_sqlite.cpp
  15. !system-sqlite:!contains( LIBS, .*sqlite.* ) {
  16. CONFIG(release, debug|release):DEFINES *= NDEBUG
  17. DEFINES += SQLITE_CORE SQLITE_OMIT_LOAD_EXTENSION SQLITE_OMIT_COMPLETE
  18. # INCLUDEPATH += ../../../3rdparty/sqlite
  19. # SOURCES += ../../../3rdparty/sqlite/sqlite3.c
  20. } else {
  21. LIBS *= $$QT_LFLAGS_SQLITE
  22. QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
  23. }
  24. include(../qsqldriverbase.pri)
  25. 4 修改 qt/src/sql/drivers/sqlite 目录下的文件 qsql_sqlite.cpp
  26. 需要增加的一个函数
  27. static int qGetSqliteTimeout (QString opts)
  28. {
  29. enum { DefaultTimeout = 5000 };
  30. opts.remove(QLatin1Char(' '));
  31. if (opts.startsWith(QLatin1String("QSQLITE_BUSY_TIMEOUT="))) {
  32. bool ok;
  33. int nt = opts.mid(21).toInt(&ok);
  34. if (ok)
  35. return nt;
  36. }
  37. return DefaultTimeout;
  38. }
  39. 需要修改的函数 bool QSQLiteDriver::open(),函数体修改为:
  40. bool QSQLiteDriver::open(const QString & db, const QString & , const QString &password, const QString &, int, const QString &conOpts)
  41. {
  42. if (isOpen())
  43. close();
  44. if (db.isEmpty())
  45. return false;
  46. if (sqlite3_open16(db.constData(), &d->access) == SQLITE_OK) {
  47. sqlite3_busy_timeout(d->access, qGetSqliteTimeout(conOpts));
  48. setOpen(true);
  49. setOpenError(false);
  50. char *pass = password.toLatin1().data();
  51. sqlite3_key( d->access, pass, password.length());
  52. return true;
  53. } else {
  54. setLastError(qMakeError(d->access, tr("Error opening database"),
  55. QSqlError::ConnectionError));
  56. setOpenError(true);
  57. return false;
  58. }
  59. }
  60. 5、编译 qt/src/plugins/sqldrivers/sqlite 下的工程, 在目录 qt/plugins/sqldrivers 中生成添加加密功能的sqlite相应库文件.
  61. 6、应用时qsqlite4.dll发到sqldrivers目录下,sqlite3放在程序根目录下