vs2008+Qt+MySql环境搭建及提示"Driver not load"的原因分析

本文详细介绍了在使用Qt开发时遇到的数据库驱动无法连接远程数据库的问题,并提供了解决方法,包括安装MySQL,编译MySQL驱动,以及正确放置libmysql.dll文件,确保能够访问远程数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者开发经验:

按照以下方法重新编译好Qt数据库库驱动以后,将这些文件放到相应C:\Qt\4.8.4\plugins\sqldrivers文件加下后,还是不能够连接远程数据库,主要差一步:
就是需将C:\Program Files\MySQL\MySQL Workbench CE 5.2.47\下的libmysql.dll库放到系统中,或放到当前执行文件目录,或放到 C:\Qt\4.8.4\bin。发布可能放到前者文件夹最好,或者放到系统变量设置的相应文件夹下面。否则只能访问本地数据库,访问远程linux系统等的数据库就不能如愿了。

原因分析:

mysql自身库没有被使用,或者使用的库错误,在C:\Program Files\MySQL\MySQL Server 5.6\lib\目录下也是存在ibmysql.dll库的,很显然,用这个库是百试不顺,用这个库是错误的。

推荐文章:

由于vs编程助手(VAssistX)和联合编译(IncrediBuild)这两个究级强大的软件,ms的ide一直是世界上最傻瓜和最强大的ide。

1、下载并安装qt-win-opensource-4.8.0-vs2008.exe,注意要是windows版的

2、下载并安装qt-vs-addin-1.1.10.exe,有了这个插件,用vs2008编写qt简直和qt creator一样方便(甚至更方便)。

下载地址:http://qt.nokia.com/downloads

3、安装MySql5.1,至少要是4以上的版本(3的话,编译驱动时还要修改源代码)。安装时要安装include和lib。

4、编译MySql驱动。

    关于这一点要好好说说,qt作为开源软件,由于版权问题,没有提供所有数据库的驱动。而这个驱动可以理解为发动机,由于这个驱动的存在,上层可以提供统一的接口(一样的方向盘,油门),而不用关心具体的数据库类型。

    关于增加QT对MySql的支持,可以通过修改配置(命令行 -qt-sql-mysql)并重新编译QT来实现(不推荐,耗时太长)。也可以以插件的形式来实现,而这就需要自己编译mysql的驱动。

    编译驱动的方法:

    a、通过vs2008的命令行工具(只要能识别qmake、nmake的命令就行)进入到QTDIR/src/plugins/sqldrivers/mysql  目录下。

    b、运行命令:

    qmake -o Makefile INCLUDEPATH+="C:/MySQL5/include" LIBS+="C:/MySQL5/lib/opt/libmysql.lib" mysql.pro

    nmake debug release

    其中C:/MySQL5为mysql的安装目录,注意安装路径不要有空格以及中文,否则会出错

   

C:\Qt\4.8.0\src\plugins\sqldrivers\mysql\release 和 C:\Qt\4.8.0\src\plugins\sqldrivers\mysql\debug

    里面把qsqlmysql4.dll、qsqlmysql4.lib、qsqlmysqld4.dll、qsqlmysqld4.lib拷到 C:\Qt\4.8.0\plugins\sqldrivers 里面就行了。

到此为止,数据的驱动编译工作完成,不过当你进行测试的时候可能会出现Driver not loaded的错误,主要是程序在编译的过程中找不到libmysql.ddl文件,解决方法为:把C:\MySQL5\lib\opt中的libmysql.ddl文件拷贝在一个系统路径能够找得到的地方!ok任务完成。。。。

下面我们进行测试一下:

[cpp]  view plain copy
  1. <span style="font-size:16px;">#include <QtCore/QCoreApplication>  
  2. #include<QtSql>  
  3.   
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QCoreApplication a(argc, argv);  
  7.     //测试系统中已经能够使用的数据库  
  8.     qDebug() << "Available drivers:";  
  9.     QStringList drivers = QSqlDatabase::drivers();  
  10.     foreach(QString driver, drivers)  
  11.     qDebug() << "\t" << driver;  
  12.     return a.exec();  
  13. }</span>  

测试使用:

#include <QtCore/QCoreApplication>
#include<QtSql>


int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//测试使用sqlite
//QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加数据库驱动
//db.setDatabaseName(":memory:"); //数据库连接命名
//if(!db.open()) //打开数据库
//{// 
// return false;
//}


//QSqlQuery query; //以下执行相关QSL语句
//query.exec("create table student(id int primary key,name varchar)");
新建student表,id设置为主键,还有一个name项
//query.exec("insert into student values(1,'xiaogang')");
//query.exec("insert into student values(2,'xiaoming')");
//query.exec("insert into student values(3,'xiaohong')");
向表中插入3条记录


//query.exec("select id,name from student where id >= 2");
查找表中id >=2 的记录的id项和name项的值
//while(query.next())       //query.next()指向查找到的第一条记录,然后每次后移一条记录
//{
// int ele0 = query.value(0).toInt();        //query.value(0)是id的值,将其转换为int型
// QString ele1 =query.value(1).toString();
// qDebug() << ele0 <<ele1 ;       //输出两个值
//}
//测试系统中已经能够使用的数据库
//qDebug() << "Available drivers:";
//QStringList drivers = QSqlDatabase::drivers();
//foreach(QString driver, drivers)
//qDebug() << "\t" << driver;
//测试mysql驱动是否使用正常ok
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");    
db.setHostName("localhost");    
db.setDatabaseName("mysql");    
db.setUserName("root");    
db.setPassword("young");    
if (!db.open())    
qDebug() << "Failed to connect to root mysql admin";  
else
qDebug()<<"\n"<<"Connect to root mysql success!";
return a.exec();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值