代码实现:
QSqlDatabase m_db = QSqlDatabase::addDatabase("SQLITECIPHER");
//必须使用对应的驱动
qDebug() << QSqlDatabase::drivers();
QString DB_FILE_PATH = QDir::currentPath() + "/" + m_strDbPath;
//qDebug() << "DB File Path is:" << DB_FILE_PATH;
m_db = QSqlDatabase::addDatabase("SQLITECIPHER");//添加数据库驱动
m_db.setDatabaseName(DB_FILE_PATH);
m_db.setPassword("abcd");//设置密码
m_db.setConnectOptions("QSQLITE_USE_CIPHER=chacha20; QSQLITE_ENABLE_REGEXP");//用于访问加密后的数据库
//m_db.setConnectOptions("QSQLITE_CREATE_KEY");
//设置连接方式(加密)
//m_db.setConnectOptions("QSQLITE_REMOVE_KEY");
//设置连接方式(解密)
注意:
如果数据不被加密,不要用设置密码的语句和解密语句,会导致数据库打不开!数据加密仅一次,下次通过chacha20访问,解密也仅限一次。如需重新加密,先判断是否需要解密。
enum KEY_OP {
OPEN_WITH_KEY = 0,
CREATE_KEY,
UPDATE_KEY,
REMOVE_KEY
};
如果数据库已加密必须先执行此函数并输入正确密钥才能进行操作,如果数据库没有加密,执行此函数后进行数据库操作反而会出现“此数据库已加密或不是一个数据库文件”的错误。经测试,只能在新建数据库时设置密码!
改密码的话先open,再使用旧密码sqlite3_key ,最后在用新密码sqlite3_rekey
下来就是如何在QT里面进行配置了:
将下载加密的插件编译后:
编译生成的debug和Release目录下
拷贝到Qt对应的相同目录下:
如果不存在可以创建;
再将编译后的文件夹找到驱动位置;
将以下文件拷贝到相应的位置:
分别是对应的DEBUG和RELEASE版本的内容。