Qt 5.9打包后sqlite运行错误:Driver not loaded

博主在打包Qt程序后遇到运行时提示“Drivernotloaded”错误,发现并非代码或缺失dll文件问题。原来,Qt的QSqlDatabase在打包后无法自动创建数据库文件,需要改用QFile先创建。此外,单例模式构造函数中打开数据库文件也会导致问题,解决方案是将数据库打开操作移到main函数中。博客提醒注意Qt的细节处理。
摘要由CSDN通过智能技术生成

今天打包Qt程序后,运行exe,报了一个奇葩的错误:Driver not loaded

乍看之下,是数据库驱动没有加载,但我在程序调试中,Debug和Release都没问题,在网上找了一圈答案后,也没有解决我的问题。网上的答案无非两种:1、代码写的有问题;2、打包的文件夹中没有qsqlite.dll等文件,这里就不详述。

折腾了半天,才发现了问题的所在:

1、我的程序中,数据库文件是代码自动创建的,代码大致如下:

    QSqlDatabase sqlDB;    
    sqlDB = QSqlDatabase::addDatabase("QSQLITE");
    sqlDB.setDatabaseName("DbFileName.db");    // 你的数据库文件名称
    //sqlDB.setUserName("Admin");
    //sqlDB.setPassword("123");
    //sqlDB.setPort(6002);
    
    if (sqlDB.open()) {
        // do something
    } else {
        // log 数据库打开失败
    }

在代码中启动时,使用QSqlDatabase的open函数,可以创建数据库文件,甚至可以创建文件夹,等同于QDir和QFile的功能,但是打包后,该方法就行不通了,只好通过QFile方法创建数据库文件;

2、我封装的数据库类使用的是单例模式,上述代码也是写在构造函数中,也不知何原因,在数据库文件已存在的情形下,运行打包的exe文件还是报错,但我写的一个Demo程序就不会报错,难道是不能在单例模式的构造函数中打开数据库文件?

于是我变换思路,将打开数据库文件的操作封装在一个函数中,在main函数中执行该函数,好家伙,这样就可以正确打开和读取数据库文件了。

总结:Qt的水太深,稍不留意就把握不住

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宏笋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值