devbean / QtCipherSqlitePlugin

A Qt plugin for cipher SQLite.
http://qtciphersqliteplugin.galaxyworld.org
GNU Lesser General Public License v2.1
392 stars 159 forks source link

使用插件执行查询语句错误! #58

Closed Mq-b closed 2 months ago

Mq-b commented 2 months ago
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << QSqlDatabase::drivers();

    // 创建 SQLite 数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("SQLITECIPHER");
    db.setDatabaseName("test_password.db");
    // 打开数据库
    if (!db.open()) {
        qDebug() << "Error opening database:" << db.lastError().text();
        return -1;
    }

    // 查询所有表名
    QSqlQuery query("SELECT name FROM sqlite_master WHERE type='table'");
    if (!query.exec()) {
        qDebug() << "Error executing query:" << query.lastError().text();
        return -1;
    }

    while (query.next()) {

     QString tableName = query.value(0).toString();
     qDebug() << "Table:" << tableName;
    }
    db.close();
    qDebug()<<"close";
    return a.exec();
}

output:

("QSQLITE", "QODBC", "QODBC3", "QPSQL", "QPSQL7", "SQLITECIPHER")
Error executing query: "No query Unable to fetch row"

这段代码如果是查询普通数据库则无任何问题。

Mq-b commented 2 months ago

这个 test_password.db 是我通过 SQlLiteStudio 创建的 wxSQLite3 加密数据库,无法查询。

但是我发现如果换成普通的 sqlite 数据库,然后再使用

db.setPassword("123456");
db.setConnectOptions("QSQLITE_CREATE_KEY");

加密出来的数据库,却可以查询到,但是 SQlLiteStudio 却无法再使用这个数据库了,我选择添加 wxSQLite3 数据库并输入密码,并没有什么作用。

Mq-b commented 2 months ago

我意识到似乎后面使用也得用

db.setPassword("123456");

输入密码,但是 SQlLiteStudio 创建的加密数据库依然无法这样。

Mq-b commented 2 months ago

这是因为我的连接输入密码的时候选择的加密算法有问题,和默认的加密算法不同,改一下就好了。