首页 > 数据库 >记录一次 QSqlite driver not loaded 错误

记录一次 QSqlite driver not loaded 错误

时间:2023-09-07 11:55:12浏览次数:38  
标签:输出 QSQLITE drivers driver dll loaded QSqlite include qsqlite

在调试软件的时候,发现查询sqlite数据出了问题,查询不到数据。通过QSqlQuery::latsError获取错误消息,结果错误原因是 driver not loaded,但是代码中使用 QSqlDatabase::drivers() 确认了一下是存在QSQLITE的,而且程序运行的时候,也输出了可用drivers里面是包括 QSQLITE的。

测试代码

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>

int main(int c,char** v)
{
    QCoreApplication app(c,v);
    QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath()+"/sqldrivers");

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

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    db.setDatabaseName("D:/work/test.db");

    if(!db.open()) {
        qDebug() << "Open Error =>" << db.lastError();
        return 0;
    }
    QString sql = "SELECT height, volume, \
            FROM st WHERE id=?";

    QSqlQuery query(db);
    query.prepare(sql);
    query.setForwardOnly(true);
    query.bindValue(0,2);
    query.exec();
    
    if(query.next()) {
        qDebug() << query.value("height");
    }else {
        qDebug() << "query error => "<< query.lastError();
    }
}

加载错误时候输出

如下图,是调用时候的输出

这里open调用是失败的,通过设置了QT_DEBUG_PLUGINS,可以显示了插件加载的过程。

因为我只把qsqlite.dll拷贝到了程序目录下的sqldrivers目录,所以QSqlDatabase::drivers()的返回只有QSQLITE一个。

可以通过输出,看出来前面确实是有QSQLITE的,而且open的时候,提升是存在QSQLITE drivers 的,但是也提示了是无法正常加载qsqlite.dll时候的。

问题的原因

通过上面输出cannot load library ...\qsqlite.dll 不是有效的 Win32 应用程序,这个提示很关键,查看一下我拷贝的qsqlite.dll文件信息,结果这是一个32位的,而我的程序是编译的64位版本。

这个原因可能是因为某次出错把Qt安装目录下的QtCreator\bin\plugins\sqldrivers\qsqlite.dll给拷贝到了Qt的目录下,错误的替换掉了原本的64位版本,而QtCreator是32位的。

如上图所示,替换掉就可以正常输出了。

标签:输出,QSQLITE,drivers,driver,dll,loaded,QSqlite,include,qsqlite
From: https://www.cnblogs.com/oloroso/p/17684452.html

相关文章

  • 软件测试|Chrome 115之后的版本,如何更新driver?
    问题描述前两天在运行一个web自动化测试脚本时,报了如下的错误,ThisversionofChromeDriveronlysupportsChromeversion113Currentbrowserversionis115.0.5790.110withbinary,如下图所示:该报错提示我,当前的driver只支持113版本的Chrome浏览器,但是我的Chrome已经自动更新......
  • 直播平台开发,WebDriver API模拟首页搜索
    直播平台开发,WebDriverAPI模拟首页搜索在输入框中清除原有的文字内容,并输入指定内容 WebElementinput=driver.findElement(By.id("xxx")); //定位到的元素,id为xxxinput.clear();StringinputString="Selenium";input.sendKeys(inputString); ​单击按钮 WebElem......
  • 直播平台制作,WebDriver API 拖拽页面元素
    直播平台制作,WebDriverAPI拖拽页面元素 importorg.testng.annotations.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;importorg.openqa.selenium.int......
  • [JDBC]JDBC之DriverManager原理
    本文只讨论JDBC驱动加载问题。1JDBC概述1.1什么是JDBCJDBC一般指Java数据库连接,(JavaDatabaseConnectivity,简称为JDBC);JDBC是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口;其提供了如查询、更新数据库中数据的方法,我们常说的JDBC是面向关系型......
  • Chrome版本在115及以上ChromeDriver下载地址
    原地址:http://chromedriver.storage.googleapis.com/index.html中看到最新驱动版本为114,而Chrome的版本已经到116,使用驱动为114会报版本不匹配的错误解决方法:115及以上版本下载地址:https://googlechromelabs.github.io/chrome-for-testing/驱动下载地址中提示115及以上在另......
  • Python连接Neo4j工具比较 Neo4j Driver、py2neo
    Python有许多可以连接Neo4j的库和工具,以下是一些常用的:Neo4jDriverforPython这是官方提供的Python驱动程序,它使用Cypher查询语言与Neo4j数据库进行交互。您可以使用此驱动程序与Neo4j数据库建立连接,执行查询和管理事务。优点:官方提供的驱动程序,支持最新的Neo4j版本,提供完整......
  • Arch中使用Qt6的QtSql出现mysql driver not loaded的解决记录
    查阅了网上的说法,出现这个错误的原因大致可能有以下几种:Qt和mysql的位数不一样,一个是32位的,一个是64位的Qt中自带的驱动库与所使用的版本不匹配代码写错了,比如"QMYSQL"写成了"MYSQL"我出现个问题的原因是第二种。参考了一位老哥的博客QTMacM1解决mysqldrivernotloade......
  • [React Typescript] Strongly Typing Lazy Loaded Components with Generics
    Navigatingtothetypedefinitionfor lazy by CMD+click inlocalVSCode,orinthe DefinitelyTyped repo.Wecanseethefollowingdefinition:functionlazy<TextendsComponentType<any>>( factory:()=>Promise<{default:T}>):L......
  • 20230628 java.sql.DriverManager
    介绍java.sql.DriverManagerpublicclassDriverManager驱动管理器根据API编写的程序都可以与驱动管理器进行通信,而驱动管理器则通过驱动程序与实际的数据库进行通信APIstaticgetConnectionConnectiongetLogWriter,setLogWritergetLoginTimeout,setLoginT......
  • 轻骑兵使用driver.js踩坑
    1安装哪个版本建议安装0.9.8原版。[email protected]怎么引入、使用不要提成文件,在页面里面使用就可以。vue-page.vuetemplate<el-form-itemprop="username":class="{user:isValidateUserName}"class="username"id="create-post1">...&l......