QT4.7.3安装mysql5.5系类驱动

1 篇文章 0 订阅
最近由于要做一个软件,不得不又重新捡起放弃已经很久的QT,才发现版本更新的这么快。。。都到了4.7.3了
在连接MYsql数据库的时候出问题了。没有驱动,Baidu了一下,又看了文档说明,原来是其他由于权限的问题,只给出了部分数据库的驱动(只有sqlite)其他的驱动只给出了源文件还有文档说明,需要自己编译,晕死,文档全是英文的,不太喜欢,没办法,边百度边看文档终于解决了问题,还是把这些东西贴出来吧,不少像我以一样的初学者肯定也会遇到这样的问题:


首先,这样的教程在网上有很多,我选了一下比较好的贴出来网址,但是根据自己的情况不同可能会遇到很多问题。。。但是大同小异,基本上都可以解决:
http://blog.knowsky.com/201556.htm
http://blog.knowsky.com/201556.htm

http://no001.blog.51cto.com/1142339/300920

http://www.blogjava.net/nokiaguy/archive/2009/03/23/261502.html



http://www.blogjava.net/nokiaguy/archive/2009/03/23/261502.html

http://no001.blog.51cto.com/1142339/300920


http://www.blogjava.net/javabloger/archive/2008/07/14/214740.html

http://space.itpub.net/22893636/viewspace-663033

mingw-utils包下载:http://www.qtcn.org/download/mingw-utils-0.3.tar.gz


闲话少说:解决问题
首先是要下载安装MYsql还有QT,这个不用多说了,接触过的都熟悉了,PS(以前下载的时候都是SDK集成的开发环境,但是,最近我下载的时候发现不一样了,SDK把不需要的塞班也加进去了,开发包很大1.5G,安装需要9G的空间)没办法我只能下载的
qt-creator-win-opensource-2.2.0
qt-win-opensource-4.7.3-mingw

安装的时候可能会遇到点错误,上面给出的网址中有解决的遮掩问题的,哈哈,放心吧。。。

然后就是MYsql,我安装的是5.5,一个比较新的版本,下载网址是:
http://www.mysql.com

安装的时候最好就一次安装好,不然就悲剧了,这个很难被卸载。。。
=================================================================================
然后就是编译mysql驱动了:
打开
Qt Command Prompt 。你会发现,你的环境变量他自己给你设定了,这样的话,就需要在你的编译驱动之前就修改这些环境变量,不然的话会在编译的时候遇到各种“不是命令或者内部文件”的问题

首先打开
qt-win-opensource-4.7.3-mingw安装目录下面的bin目录找到 Qt Command Prompt的批处理文件,然后编辑他的环境变量的部分“PATH”记住有两处需要修改,


然后就是具体的操作了(派出了各种问题的隐患)
===================================================================================

引用::
You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MYSQL):
   cd %QTDIR%\src\plugins\sqldrivers\mysql
   qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro
   nmake
If you are not using a Microsoft compiler, replace nmake with make in the line above.

这 就是一个容易搞混的地方,上面是使用的libmysql.lib和nmake来编译的,如果使用的是msvc的编译器,那上面是没问题的,但是如果使用的 是mingw编译器,那就会出错,有undefined reference....等类错误字样。这是因为mingw使用的库和msvc使用的不同格式的库而引起的。而mysql只提供了msvc可使用的库。 qt4 for mingw要想编译出qsqlmysql库来,我们先得编译出mingw需要的libmysql.a这个文件来,可使用mingw工具来生成。
mingw -utils包里的reimp命令(如果没有这个命令的话,可从本帖开头处给出的地址中下载这个文件,并把它解压开后的bin目录里的reimp内容拷贝到 mingw的bin目录下面。mysql安装的时候默认的安装路径中有空格,我们得先把它的include和lib目录拷贝到没有空格的路径下,比如C: \mysql下)


CODE:
cd c:\mysql\lib\opt
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a

这时候你会发现你的lib文件夹下面会多出两文件:

l ibmysql.a   &   libmysql.def

(推荐使用mysql5.5,其他的貌似没有libmysql*.lib文件)


然后使用qmake和make命令:
cd %QTDIR%\src\plugins\sqldrivers\mysql
   qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.a" mysql.pro
   make

这下便会在%QTDIR%\plugins\sqldrivers目录下面生成libqsqlmysql.a, qsqlmysql.dll这两个文件了。

注意这里可能会遇到这种问题:
WARNING: (internal):1: d backslashes are deprecated.
WARNING: (internal):1: d backslashes are deprecated.
WARNING: (internal):1: d backslashes are deprecated.

我也遇到了你的这个问题,我把我的解决方法给你,希望对你有用。

(1)dos下进入:D:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql>
(2)用记事本打开D:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\ mysql.pro文件,在第二行加入:
INCLUDEPATH += "C:\Program Files\MySQL\MySQL Server 5.1\include"
LIBS += "C:\Program Files\MySQL\MySQL Server 5.1\lib\opt\libmysql.lib"
并保存
(3)在dos下输入:qmake -o Makefile mysql.pro
此时可能也会提示:
WARNING: d:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: d ba
ckslashes are deprecated.
WARNING: d:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: d ba
ckslashes are deprecated.
WARNING: d:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: d ba
ckslashes are deprecated.
但是好像对最后的结果没有影响


然后使用make命令;
但是这时候只有在debug文件夹有两个文件
然后使用 make  release
生成release目录下的文件

qsqlmysql4.dll
libqsqlmysql4.a
qsqlmysqld4.dll
libqsqlmysqld4.a

这时候把这几个文件拷贝到

C:\Qt\……\plugins\sqldrivers下面;

另外,根据文档所说的,还要把libmysql.dll复制到system32目录



ok,解决了

一下是引用的我参考的文章:


文章的出处是:http://no001.blog.51cto.com/1142339/300920

==============================================================================

Qt 4 访问 mysql 数据库的简单教程

首 先说个题外话, 我研究(算是研究吧)qt 连数据库的问题, 是为了以后写一些商业软件做基础的, 我就是怕有人骂我, 不更新eva, 却研究这么多东西。 自己先惭愧一下, 但毕竟, 我也得考虑今后吃饭的问题, 不过 eva 肯定也会更新的, 只是可能再等一段时间。虽然我是在windows下安装,测试,但在linux下也差不了多少,而且我主要是想和大家共享 Qt 连接 mysql 的编程方法,但文中确实牵扯到了一些windows设置,所以本来打算发到 KDE 版, 但发在这里也许好一点吧。好了,闲话先到这里打住。


Qt 4 访问 mysql 数据库的简单教程


云帆 2006/5/18

因为目前无法使用linux, 所以 Qt 4.1.2 是 windows 开源版, mySql 5.0.21 也是windows 开源版。不过这2个软件都是跨平台的,方法大同小异。

一、配置windows下开发环境。

1. Qt 的安装
这个很简单, 去 trolltech 网站自己下载一个 windows 开源版的就好了。然后双击安装, 一路next, 如果问是否需要安装 MinGW, 点是, 然后next下去, 就完成了。

2. MySQL 的安装
我不喜欢安装东西, 所以去 www.mysql.com 下了个非安装版, 直接放到C盘下了。

至此, 安装环境完成。 

二、解决 mysql 的 Qt 驱动问题

这 个问题困扰了我一些时间, 因为 Qt 安装完后, 没有带 mySQL 的驱动, 写好的程序运行会提示说 “Driver not loaded”。不过还好, 在 src 目录下可以找到 mysql qt 驱动的源代码。 后来我用 Qt assistant 上说的方法, 但始终无法生成库文件, 总有链接错误。 后来google 一下,在 qtcn 上看到他们站长发的一篇文章,才知道是 mysql 默认带的库文件是 ms 格式的, 所以使用 make 的话,ld 程序链接时会失败。 如果大家使用linux系统, 那么就只需按 assistant 说的就够了, 下面 XChinux 也提到了。

解决的办法他也给出了。转录如下:

以下引用引自:http://www.qtcn.org/bbs/read.php?tid=4210&fpage=&toread=&page=1
作者:XChinux

QUOTE:
Qt4 OpenSource for mingw中编译MySQL驱动

mingw-utils包下载:http://www.qtcn.org/download/mingw-utils-0.3.tar.gz

在Qt4的文档中在Windows下关于怎样编译mysql的驱动上面说

You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MYSQL):
     cd %QTDIR%\src\plugins\sqldrivers\mysql
     qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" mysql.pro
     nmake
If you are not using a Microsoft compiler, replace nmake with make in the line above.
这 就是一个容易搞混的地方,上面是使用的libmysql.lib和nmake来编译的,如果使用的是msvc的编译器,那上面是没问题的,但是如果使用的 是mingw编译器,那就会出错,有undefined reference....等类错误字样。这是因为mingw使用的库和msvc使用的不同格式的库而引起的。而mysql只提供了msvc可使用的库。 qt4 for mingw要想编译出qsqlmysql库来,我们先得编译出mingw需要的libmysql.a这个文件来,可使用mingw工具来生成。
mingw -utils包里的reimp命令(如果没有这个命令的话,可从本帖开头处给出的地址中下载这个文件,并把它解压开后的bin目录里的内容拷贝到 mingw的bin目录下面。mysql安装的时候默认的安装路径中有空格,我们得先把它的include和lib目录拷贝到没有空格的路径下,比如C: \mysql下)

cd c:\mysql\lib\opt
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a
如此,这样我们的命令行为(注意qmake和make):

     cd %QTDIR%\src\plugins\sqldrivers\mysql
     qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.a" mysql.pro
     make
这下便会在%QTDIR%\plugins\sqldrivers目录下面生成libqsqlmysql.a, qsqlmysql.dll这两个文件了。
有 一点, 就是下载他给出的mingw-utils-0.3.tar.gz 文件, 只需要把里面的 reimp 工具复制到你的 minGW目录下的bin 里就可以了,这样按上面的步骤就可以生成需要的驱动了。 make 结束后, 库文件会生成到qt的系统目录中去。


三、简单配置 mysql

1. 运行 mysql 服务 (假定 mysql 安装在 C:\mysql 下)
打开一个控制台窗口, 就是“DOS”窗口,

cd c:\mysql\bin
mysqld
正 常情况下, 什么提示都没有, 当然你不放心的话, 去C:\mysql\data 找扩展名是err 的文件看一下, 所有的日志都在里面。另外, 建议把 C:\mysql\bin 加入系统的PATH中, 这样就可以在任何目录下运行mysql了, 以下默认是加到 PATH中的, 大家可以通过在我的电脑点击右键, 选择“属性”,然后点“高级”标签页,点“环境变量”按钮, 进去找到 PATH的变量, 加上";c:\mysql\data\"。

2. 测试客户端链接
再开一个“DOS”窗口, 输入:

mysql -u root
来访问 mysql 服务, 这个非安装版, 默认含有 root 用户, 也就是mysql 里的最高用户, 什么都可以做。同时默认 root 用户没有密码。 当然你可以登录后使用

SET PASSWORD= PASSWORD("密码")
来设置自己的密码。

登录后, 就进入 mysql 环境, 提示符也成了 mysql>

3. 为我们的测试程序新建一些数据

3.1 创建一个数据库

mysql> create database example;
Query OK, 1 row affected (0.03 sec)
mysql> use example;
Database changed
这样就创建了一个叫 example 的数据库, 我们后面就使用这个库来做试验。

3.2 创建一个可以完全控制这个数据库的用户

mysql> GRANT all
     -> ON example.*
     -> TO yunfan@localhost;
Query OK, 0 rows affected (0.00 sec)
通 过上面的语句, 系统会自动更新系统的用户表,新建一个叫做 yunfan 的用户, 这个用户只可以通过本机来访问数据库, 至于网络访问权限, 我没有测试, 但是应该也是大同小异,改@后面就可以了。注意, 这个新创建的用户是没有密码的, root 可以给他设置密码, 还是使用 grant 命令操作,不过我是后面用yunfan登录后自己设置的(用上面说过 set password 的方法)。yunfan 这个用户被赋予了 example 数据库的完全权限。

3.3 用 yunfan 帐号登录

mysql -u yunfan
如果有密码, 那么使用

mysql -u yunfan -p
或者输入完-p后直接回车, 程序会让你输入密码。

3.4 新建一个表

mysql> CREATE TABLE employee (
            -> id     CHAR(3),
            -> lastname VARCHAR(30),
            -> firstname VARCHAR(20),
            -> dob DATETIME,
            -> phone VARCHAR(10)
            -> );
Query OK, 0 rows affected (0.00 sec)
这样就新建了一个叫做 employee 的表,含有 4 个字段, id 号, 姓, 名,生日, 电话。

我们然后插入2条记录:

mysql> INSERT INTO employee VALUES ("001", "热", "X", "2000-05-18", "5188");
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO employee VALUES ("002", "包", "子", "2000-05-18", "5198")
Query OK, 1 row affected (0.00 sec)
那么, 现在我们就准备好了所有数据了。

四、 Qt 4 的一个简单访问 mysql 的例子

1 Qt 连接 mysql 实例讲解

下面的例子非常的简单, 使用了 QTextEdit 来显示查询到的内容,主要是要说明Qt 4 中如何连接和访问数据库。至于用什么显示, 不是现在我们关心的问题。:)

#include <QtGui>
#include <QtSql>

int main(int argc, char **argv)
{
QApplication app(argc, argv);

QTextEdit display;
display.resize(400, 160);
display.show();

            // 下面进行数据库的设置
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql数据库驱动
db.setHostName("localhost");
db.setDatabaseName("example"); // 我们之前建立的数据库
db.setUserName("yunfan"); // 我们创建的 yunfan 用户名
db.setPassword("password"); // yunfan 用户的密码

bool ok = db.open(); // 尝试连接数据库

if(ok){ // 这里用yunfan已经成功连上数据库
QSqlQuery query;     // 新建一个查询的实例

if(query.exec("select * from employee")){     // 尝试列出 employee 表的所有记录
                                   // 本次查询成功
int numRows = 0;

                                   // 询问数据库驱动,是否驱动含有某种特性
if(db.driver()->hasFeature(QSqlDriver::QuerySize)){
numRows = query.size(); // 如果支持结果影响的行数,那么直接记录下来
} else{
query.last();     //否则定位到结果最后,qt 文档说,这个方法非常慢
numRows = query.at() + 1;
}

QString id, lname, fname, phone;
QDateTime dob;
display.append("===========================================");
display.append(QString::fromLocal8Bit(" id |     姓名 |     生日        | 电话"));
display.append("--------------------------------------");
while(query.next()){ // 定位结果到下一条记录
id = query.value(0).toString();
lname = QString::fromLocal8Bit(query.value(1).toByteArray());
fname = QString::fromLocal8Bit(query.value(2).toByteArray());
dob = query.value(3).toDateTime();
phone = QString::fromLocal8Bit(query.value(4).toByteArray());
QString result = id + " " + fname + lname + "     " + (dob.toString()) + "     "+phone;
display.append(result);
}
display.append("============================================");
display.append(QString("totally %1 rows").arg( numRows) );
} else {
                                   // 如果查询失败,用下面的方法得到具体数据库返回的原因
QSqlError error = query.lastError(); 
display.append("From mysql database: " + error.databaseText());
}
} else {
                    // 打开数据库失败,显示数据库返回的失败描述
display.append("cannot open database.");
display.append("Reason: " + db.lastError().databaseText());
}
QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));
return app.exec();
}
2 编译程序

存盘后(假定存为 client.cpp ), 我们需要生成qt 工程文件。 打开“DOS”窗口,cd 到
你client.cpp 所在的目录下, 输入

qmake -project -o client.pro
这样就生成了工程文件 client.pro, 但是这对编译是不够的,因为还需要手动让qmake生成makefile的时候链接相关的sql库文件。现在,打开client.pro, 随便找一行,回车来建个新行,
然后加上几个字:

QT += sql
然后存盘就搞定了, 就这么简单 :)。 接下来就是固定套路

qmake
make
看看新生成的 Release 目录下, 我们的 client 程序已经编译好了。运行一下试试看 ;)


五、总结一下

大 家可以看到,使用 Qt 来连接 mysql 是非常简单的事情, 当然 Qt 还提供了一些数据库相关的 widget 来更好的显示,更新数据。 这个以后我用到了也会相继写些总结出来, 大家一起共享。我在整个上面的过程中, 最郁闷的地方是Qt的mysql驱动还需要用户自己编译, 相信这个会给很多人带来麻烦(如果使用linux系统, 那么按 Qt 文档生成驱动应该是完全没有问题的, windows用户会遇到库格式不兼容的问题)。好了, 这也是我第一次用Qt 来访问数据库, 也是一次摸 mysql, 说错的, 不合适的地方,大家扔砖头吧。 

------------------------------------------------

在Windows下面利用QT开发数据库应用,如MYSQL,首先,我们必须利用源码编译MYSQL驱动库;
1)安装qt-sdk-win-opensource-2010.02.1.exe
此时,QT安装了QT Creator,假定目录为:
E:\Qt\2010.02.1\,可以选择安装MingW;
此时,E:\Qt\2010.02.1\QT为Qt库的安装位置;
2)安装MySQl,假定目录为:
include 路径为:D:\MySQL\MySQL Server 5.0\include
lib路径为:D:\MySQL\MySQL Server 5.0\lib\opt
由于两路径还有空格;拷贝至C:\mysql文件夹下;
3)将E:\Qt\2010.02.1\QT\bin 和MINGW\bin加入到PATH中;
4)cd E:\Qt\2010.02.1\qt\src\plugins\sqldrivers\mysql文件夹
运行:
E:\Qt\2010.02.1\qt\src\plugins\sqldrivers\mysql>qmake -o     Makefile     "INCLUDEPA
TH+=C:\mysql\INCLUDE"     "LIBS+=C:\mysql\lib\opt\libmysql.lib"     mysql.pro
nmake
在E:\Qt\2010.02.1\qt\plugins\sqldrivers下生成MYSQL的驱动;
编写数据库访问代码:
  1. QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");  
  2.     db.setHostName("127.0.0.1");  
  3.     db.setPort(3306);  
  4.     db.setDatabaseName("test");  
  5.     db.setUserName("root");  
  6.     db.setPassword("**********");  
  7.     if(!db.open()){  
  8.         QMessageBox::warning(this,"warning!","failure");  
  9.     }else 
  10.         QMessageBox::information(this,"OK!","success!");  
  11.      
访问成功;

------------------------------------------------

在windows下编译好的QT程序在其他没有安装QT的机器上会出现无法连接数据库的问题。
               这时我们可以通过以下方式来解决:
                在 release文件夹里创建plugins文件夹,并将QT安装目录下的plugins\sqldrivers文件夹复制到release \plugins文件夹(我的程序使用的是SQLite数据库,由于plugins\sqldrivers文件夹里有默认的数据库驱动,所以直接复制过去 就可以了,如果是其他数据库可能需要下载其他第三方的sql驱动)
             然后最重要的一步是在main.cpp中添加以下语句
             QApplication::addLibraryPath("./plugins");
             编译程序之后再发布就可以了。
转:http://blog.csdn.net/zhaoyue007101/article/details/7780416
这里我由于始终无法进行reimp操作,不知道为什么,自己电脑上也安装了mysql,于是我在网上下载了一个4.7.3编译成的一个驱动,网址http://download.csdn.net/download/jixiangqd/3457494,唯一的缺陷就是mysql版本不是很对应,我的是5.5,他的是5.5.X的版本,但是现在也成功了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值