首页 > 解决方案 > 如何在 Qt 5 中加载 Sqlite 扩展

问题描述

我想在我的 SQLite 数据库中添加一张图片,但是在执行查询时我收到了这条消息:“无法获取行”

我试图创建一个名为mod_fileio.dll的 sqlite 扩展。在应用程序 satrtup 上,我执行以下代码,但现在消息是“驱动程序未加载”

void DatabasePool::add_database(uint bdd_id, QString bdd_path) {
    remove_database(bdd_id);
    if(QFile::exists(bdd_path) == true) {
        _DATABASES.insert(bdd_id, QSqlDatabase::addDatabase("QSQLITE", DatabasePool::_DB_NAMES[bdd_id]));
        _DATABASES[bdd_id].setDatabaseName(bdd_path);

        _DATABASES[bdd_id].open();
        if(_DATABASES[bdd_id].isOpen() == false) {
            QString msg = QString("Cannot open database [%1] from %2").arg(DatabasePool::_DB_NAMES[bdd_id]).arg(bdd_path);
            LOG(msg.toStdString(), ERROR);
            remove_database(bdd_id);
        } else {
            QString msg = QString("Database [%1] added").arg(DatabasePool::_DB_NAMES[bdd_id]);
            LOG(msg.toStdString(), INFO);
        }

        QVariant v = _DATABASES[bdd_id].driver()->handle();
        if(v.isValid() && qstrcmp(v.typeName() , "sqlite3*") == 0) {
            sqlite3_initialize();
            sqlite3* db_handle = *static_cast<sqlite3**>(v.data());
            if(db_handle != nullptr) {
                sqlite3_enable_load_extension(db_handle, 1);
                QSqlQuery query;
                query.exec("SELECT load_extension('mod_fileio')");
                if(query.lastError().isValid())  {
                    QString msg = QString("Error cannot load sqlite extension : %1").arg(query.lastError().text());
                    LOG(msg.toStdString(), ERROR);
                }
            } else {
                LOG("Cannot handling database !!!", ERROR);
            }
        }

    } else {
        QString msg = QString("No [%1] database available. File {%2} not exist!!!").arg(DatabasePool::_DB_NAMES[bdd_id]).arg(bdd_path);
        LOG(msg.toStdString(), ERROR);
    }
}

你能帮助我吗 ?

标签: sqliteqt

解决方案


推荐阅读