是否可以将QSqlDatabase与SQLCipher一起使用?
Is it possible to use QSqlDatabase along SQLCipher?
我想在Qt中使用加密的SQLite数据库,是否可以通过QSqlDatabase
连接到数据库并使用SQLCipher加密或解密数据库?例如,我经常连接到SQLite数据库文件,像这样:
QSqlDatabase db = QSqlDatabase::addDatabase( "QSQLITE","Main_Connection" );
db.setDatabaseName( "Main.sqlite" );
db.open();
我想知道是否可以使用SQLCipher API来解密数据库,并使用Qt数据库模块来连接和操作数据库?
由于API是相同的,您应该能够使用SQLCipher构建Qt的SQLITE驱动程序而无需修改。唯一需要注意的是,
- 库和头文件名相同,并且是可用的,并且
- 在访问任何数据之前,使用SQLCipher的PRAGMA指令手动初始化加密参数
如果您在Linux上并且不能(或不想)修改系统,那么在sqlite下修改configure script,这样它就可以找到sqlcipher头并链接到正确的libsqlcipher库。例如,这个改变允许我用SQLCipher来构建SQLite插件,
--- a/configure
+++ b/configure
@@ -4736,12 +4736,12 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do
if [ "$CFG_SQL_sqlite" != "no" ]; then
SQLITE_AUTODETECT_FAILED="no"
if [ "$CFG_SQLITE" = "system" ]; then
- if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3 2>/dev/null; then
+ if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists sqlite3override 2>/dev/null; then
QT_CFLAGS_SQLITE=`$PKG_CONFIG --cflags sqlite3 2>/dev/null`
QT_LFLAGS_SQLITE=`$PKG_CONFIG --libs sqlite3 2>/dev/null`
else
- QT_CFLAGS_SQLITE=
- QT_LFLAGS_SQLITE="-lsqlite3 -lz"
+ QT_CFLAGS_SQLITE="-I/usr/include/sqlcipher"
+ QT_LFLAGS_SQLITE="-lsqlcipher -lz"
fi
if compileTest unix/sqlite "SQLite" $QT_LFLAGS_SQLITE $QT_CFLAGS_SQLITE; then
if [ "$CFG_SQL_sqlite" = "auto" ]; then
那么你需要配置-system-sqlite
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 是否可以将QSqlDatabase与SQLCipher一起使用?