gpt4 book ai didi

c++ - 连接到数据库时出现错误 `driver not loaded`

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:54 25 4
gpt4 key购买 nike

首先:我正在使用 Qt v5.3.1MinGW 4.8.2,以及 Window 7 32bit平台。

当我在 windows 7 中运行我的应用程序时,我发现只有在安装了 Qt 环境的情况下它才能正常连接到数据库,当将相同的应用程序移动到另一个平台如 windows xp 时也是如此 通过Virtual PC,不幸的是我发现连接数据库也失败了,并且出现错误消息driver not loaded,但是应用程序运行正常但没有连接到数据库。

我的尝试:

  • 我已经使用 QSqlDatabase::drivers() 检查是否支持 sqlite在系统中,结果是 sqlite 数据库支持许多其他类型。

  • 我已经使用 isValid() 来检查是否有有效的驱动程序,但是函数返回false,表示数据库类型为不可用或无法加载。

以下是我使用的代码:

数据库.h

class database
{
public:
static QSqlDatabase db;
static QString dbPath;
database();

static void connect();
static bool openConnection();
static void CloseConnection();
static void removeDB();
};

数据库.cpp

QSqlDatabase database::db = QSqlDatabase::addDatabase("QSQLITE");
QString database::dbPath = "";

database::database(){
}

void database::connect(){
database::dbPath = "database.db";
database::db.setDatabaseName(database::dbPath);
}

void database::CloseConnection(){
database::db.close();
}

void database::removeDB(){
database::db.removeDatabase(database::db.defaultConnection);
}

我还检查了数据库文件是否存在,并且我也打开了与数据库的连接。

database::connect();
if(QFile::exists(database::dbPath)){
if(database::db.open()){
ui->label->setText(ui->label->text() + "Connected.");
QSqlQuery qry;
qry.prepare("SELECT * FROM users");
qry.exec();
while(qry.next()){
ui->listWidget->addItem(qry.value("username").toString());
ui->listWidget->item(ui->listWidget->count()-1)->setData(Qt::UserRole, qry.value("id").toString());
}
database::CloseConnection();
}else{
ui->label->setText(ui->label->text() + "Failed to connect to database");
}
}else{
ui->label->setText(ui->label->text() + "Database file does not found");
}

我不知道与数据库的连接有什么问题,一切正常,我的应用程序中没有丢失文件,可执行文件旁边还有数据库文件。

如何解决这个问题?

最佳答案

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

这一行就是问题所在。这是全局代码(在 main 之前运行的代码),它依次尝试在创建 QCoreApplication 实例之前加载 Qt 插件。因此,此调用将失败。

解决方案:保持默认初始化并在创建 QCoreApplication 之后调用 addDatabase

更好的解决方案:停止使用全局变量;您可以在 main 中打开您的数据库连接,并将连接句柄传递给需要它的类(另请注意,QtSql 类 native 支持“连接名称”的概念,这样您就可以从任何地方访问该连接,只要给定连接的正确名称)。

关于c++ - 连接到数据库时出现错误 `driver not loaded`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25577399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com