sqlite - 如何在 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);
}
}
你能帮助我吗 ?
解决方案
推荐阅读
- java - HikariCP 升级到 Debian 10 (mariadb)
- java - Spring Boot 值注入
- java - Intellij 字体颜色不变
- laravel - 一般错误:1364 字段“user_id”没有默认值(SQL:在 laravel-8 中插入“产品”.....
- onesignal - OneSignal 中等效的 Firebase 云消息传递主题
- junit - 为什么 Junit assertThat() 传递两个对象,尽管对象不相等?
- node.js - NodeJS MongoDB计数字段中具有相同值的条目
- python - Python request() 获取 json 在浏览器中与脚本中给出不同的正文
- swift - 为什么 Swift NumberFormatter 需要一个不间断的空间才能正常工作?
- c++ - 只用谷物反序列化一些变量