​​[Qt教程]​​​​第22篇 数据库(二)编译MySQL数据库驱动​​








编译MyQSL数据库驱动




版权声明












该文章原创于作者yafeilinux,转载请注明出处!





导语












在上一节的末尾我们已经看到,现在可用的数据库驱动只有两类3 种,那么怎样使用其他的数据库呢?在Qt 中,我们需要自己编译其他数据库驱动的源码,然后当做插件来使用。下面就以现在比较流行的MySQL 数据库为例,说明一下怎样在QtCreator 中编译数据库驱动。





环境: Windows Xp + Qt 4.8.4+Qt Creator2.6.2





目录












一、查看怎样编译数据库驱动



二、下载MySQL



三、安装MySQL



四、在MySQL 中创建数据库



五、编译MySQL 驱动



六、测试MySQL 程序












正文











一、查看怎样编译数据库驱动



1. 在Qt Creator 的帮助模式索引SQL Database Drivers 关键字,这篇文档里详细介绍了Qt 数据库的相关内容。



2. 我们在文档中定位到How to Build the QMYSQL Plugin on Windows 一段,这里讲解了怎样在Windows 下编译MySQL 驱动。如下图所示。





可以看到,主要分为两步,首先下载并安装MySQL ,在安装时要使用Custom Install 定制安装,安装上库Libs 和头文件Include Files ;然后是编译,注意在编译驱动前先添加上MySQL 的库和头文件。




二、下载MySQL



1. 我们先进入MySQL 的主页 ​​http://www.mysql.com/​​ ,然后点击左上角的Downloads ,如下图所示。





2. 然后进入该页面最下面的MySQL Community Edition(GPL) 链接,我们使用遵循GPL 协议的开源版本。如下图所示。





3. 在新的页面我们选择左上角Downloads 按钮下面的Archives 选项,从档案中下载。如下图所示。





4. 在这个页面我们选择现在最新的 ​​MySQLDatabase Server 5.6​​ 版本。如下图所示。





5. 下面我们选择按照平台分类里的 ​​MicrosoftWindows (34 files)​​ 。如下图所示。





6. 这里我们下载最新版本的第二个链接 ​​MicrosoftWindows 32. (Windows Installer format) (1 Feb 2013, 35.5M)​​ ,如下图所示。




7. 下载后的最终文件为:mysql-5.6.10-win32 (大家也可以 ​​下载​​ 我们上传到网上的软件包,因为下面的操作只需要MyQSL 的库、头文件以及最基本的功能,所以我们下载了该版本)




三、安装MySQL



1. 运行下载的安装包,如下图所示。





2. 点击Next ,进入下一步,这里我们选择同意条款。如下图所示。




3. 接着Next ,下面我们选择定制安装Custom 。如下图所示。





4. 这里需要安装所有的头文件和库,点击Development Components 前面的下拉箭头,然后选择第二项。如下图所示。大家也可以看下右边的说明。





5. 然后选择下面的Browse… 来更改安装路径,这里设置为C:\MySQL\ ,如下图所示。




6. 填写完路径后点击ok 回到主页面,点击Next 来到新的页面,这里选择Install 来进行安装。如下图所示。





7. 等安装完毕后,点击Finish 完成安装。如下图所示。






四、在MySQL中创建数据库



1. 下面我们先在安装的MySQL 中创建一个数据库,用于后面的测试。首先到MyQSL 的安装目录C:\MySQL\bin 目录下运行mysqld.exe 程序,该程序运行完成后会自动关闭。如下图所示。




2. 在Windows 开始中点击“运行”,然后输入cmd ,进入终端后我们输入下面的命令:



cd C:\MySQL\bin



跳转到安装目录下。如下图所示。





3. 然后输入下面的命令:


mysql –uroot –p


我们使用root 用户来登陆MySQL ,因为默认密码是空的,所以这里不用设置密码。运行这行代码会提示Enterpassword ,我们这时敲回车即可。如下图所示。




4. 登录MySQL 以后,我们使用下面的命令来查看现有的数据库:


show databases ;


注意后面有个分号。如下图所示。






可以看到,这里现在已经有几个数据库了,他们是MySQL 需要的。如下图所示。




5. 我们不使用已经有的数据库,而是新建自己的数据库,下面新建名为mydata 的数据库:


create database mydata ;


如下图所示。






6. 我们再次查看已经存在的数据库,发现显示出了刚才创建的数据库,如下图所示。






7. 完成后,可以输入exit 退出MySQL 。


        这里只是简单介绍了一下在MySQL 中创建数据库的基本步骤,如果大家想学习更多的MySQL 的使用,请参考其他资料。





五、编译MySQL驱动



1. 我们进入Qt 安装目录的mysql 源码目录中,具体路径为(这里Qt 安装在了C 盘):



C:\Qt\4.8.4\src\plugins\sqldrivers\mysql



如下图所示。





2. 我们使用Qt Creator 打开里面的mysql.pro 项目文件。然后打开mysql.pro 文件,在最下面添加下面两行代码:


INCLUDEPATH   += C:/MySQL/include/



LIBS += -LC:/MySQL/lib/ -llibmysql


        这样便包含了MySQL 的库和头文件。如下图所示。




3. 现在我们使用左下角的锤子    按钮来构建项目。默认构建的是Debug 版本,会在Qt 目录的mysql 目录的同层目录里面生成构建目录,如下图所示。






里面的debug 目录里有我们需要的qsqlmysqld4.dll 和libqsqlmysqld4.a 文件,不过它们只用于开发Debug 版本的MySQL 程序。如下图所示。





4. 为了生成release 库,我们在Qt Creator 中运行按钮那里设置为编译Release 版本。如下图所示。





5. 下面再次按下锤子按钮来编译项目,就会生成“build-mysql- 桌面-Release ”样式的构建目录,里面包含了发布release 版本程序需要的dll 文件qsqlmysql4.dll 。



6. 我们将生成的qsqlmysql4.dll ,libqsqlmysql4.a ,qsqlmysqld4.dll ,libqsqlmysqld4.a 都复制到C:\Qt\4.8.4\plugins\sqldrivers 目录下,这是数据库驱动插件放置的目录。如下图所示。






六、测试MySQL程序


1. 新建Qt 控制台应用,名称为sqldrivers 。完成后在pro 文件中更改如下:



QT        += core   sql


2. 更改main.cpp 文件内容如下。






  1. #include <QCoreApplication>
  2. #include <QSqlDatabase>
  3. #include <QDebug>
  4. #include <QStringList>
  5. #include <QSqlQuery>
  6. int main(int argc, char *argv[])
  7. {
  8.     QCoreApplication a(argc, argv);
  9.     
  10.     // 输出可用数据库
  11.     qDebug() << "Available drivers:";
  12.     QStringList drivers = QSqlDatabase::drivers();
  13.     foreach(QString driver, drivers)
  14.         qDebug() << driver;
  15.     
  16.     // 打开MySQL
  17.     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
  18.     db.setHostName("localhost");
  19.     db.setDatabaseName("mydata");
  20.     db.setUserName("root");
  21.     db.setPassword("");
  22.     if (!db.open())
  23.         qDebug() << "Failed to connect to root mysql admin";
  24.     else qDebug() << "open";
  25.     
  26.     QSqlQuery query(db);
  27.     
  28.     //注意这里varchar一定要指定长度,不然会出错
  29.     query.exec("create table student(id int primary key,name varchar(20))");
  30.     
  31.     query.exec("insert into student values(1,'xiaogang')");
  32.     query.exec("insert into student values(2,'xiaoming')");
  33.     query.exec("insert into student values(3,'xiaohong')");
  34.     
  35.     query.exec("select id,name from student where id >= 2");
  36.     
  37.     while(query.next())
  38.     {
  39.         int value0 = query.value(0).toInt();
  40.         QString value1 = query.value(1).toString();
  41.         qDebug() << value0 << value1 ;
  42.     }
  43.     
  44.     return a.exec();
  45. }




复制代码




        这里注意,创建表时varchar 一定要指定长度。现在运行程序,会出现如下图所示的结果:




这里提示MySQL 驱动没有加载。



3. 我们到C:\MySQL\lib 中将libmysql.dll 文件复制到C:\Qt\4.8.4\bin 中,然后再次运行程序,发现已经成功了,如下图所示。






结语












        在Qt 中编译MySQL 数据库驱动的内容到这里就介绍完了。从下一篇开始,我们将以SQLite 数据库为范例来讲解Qt 数据库部分的应用。







涉及到的代码:  ​​​sqldrivers.zip​​ (1.24 KB, 下载次数: 18)