Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1485008
  • 博文数量: 226
  • 博客积分: 3997
  • 博客等级: 少校
  • 技术积分: 2369
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-19 17:26
个人简介

Never save something for a special occasion. Every day in your life is a special occasion.

文章分类

全部博文(226)

文章存档

2018年(5)

2017年(11)

2016年(1)

2015年(17)

2014年(14)

2013年(30)

2012年(5)

2011年(52)

2010年(107)

分类: Windows平台

2014-04-16 19:51:54

原文:http://blog.sina.com.cn/s/blog_98a4dde7010139rp.html

此文档针对 windows下QtSDK用户
 
Qt 由于授权许可的限制,其开源版本没有提供所有数据库的驱动程序。免费下载的中只含有 SQLite 驱动程序,要想与 mysql或oracle 等连接需要自己编译其驱动。
    步骤:
    一. 下载mysql http://dev.mysql.com/downloads/ 最新版本   // 注1
    二. 安装mysql  安装时不能选择Typical型,这样会缺少库文件(include和lib文件夹)。选择FUll型或定制。
    三. 将mysql安装目录下的 include和lib 两个文件夹拷贝到 qt\4.7.4\src\plugins\sqldrivers\mysql 下。在此新建目录 mysqllib。 // 注2
    四. 修改 mysql.pro 文件,在第二行添加如下内容
          INCLUDEPATH += "./mysqllib/include"
          LIBS+= "./mysqllib/lib/libmysql.lib"
    五.将QT的bin目录和mingw的目录都添加到环境变量的path中(为了使用 qmake, mingw32-make)。
        set path=F:\QtSDK\mingw\bin;F:\QtSDK\Desktop\Qt\4.7.4\mingw\bin\;%path%
    六.编译mysql驱动
        cd /d D:\Qt\4.7.4\src\plugins\sqldrivers\mysql\
        qmake
        mingw32-make release
        mingw32-make debug
       执行qmake将会生成目录debug、release 和文件 Makefile.Debug、Makefile.Release。
       编译后生成文件:
      release/libqsqlmysql4.a,qsqlmysql4.dll
      debug/libqsqlmysqld4.a,libqsqlmysqld4.dll
      将它们拷贝至
       QtSDK\Desktop\Qt\4.7.4\mingw\plugins\sqldrivers

   七. 将mysql的库文件 libmysql.dll 拷贝到 QtSDK\Desktop\Qt\4.7.4\mingw\bin 目录下

测试驱动是否安装好:
新建 qt gui 控制台项目 SQLtest
在SQLtest.pro中加入 QT += sql
代码 main.cpp 内容如下

点击(此处)折叠或打开

  1. #include <QtCore/QCoreApplication>
  2. #include <QtSql>
  3. int main(int argc, char *argv[])
  4. {
  5.     QCoreApplication a(argc, argv);
  6.     qDebug() << "Available drivers:";
  7.     QStringList drivers = QSqlDatabase::drivers();
  8.     foreach(QString driver, drivers) qDebug() << "\t " << driver;
  9.     qDebug() << "End";
  10.     return a.exec();
  11. }
输出为:
Available drivers:        
   "QSQLITE"        
   "QMYSQL3"        
   "QMYSQL"
End
其中有"QMYSQL"则表示编译mysql的驱动成功了!!    


注1:
MySQL v5.6.17 官方正式版 
安装MySql 到 check requirements 时卡住,visual studio tools for office 2010 runtime通不过。
退回去,取消Application

注2:
我的电脑已经安装 qt4.7.4(F:\QtSDK\),但根据网上教程编译MySql驱动时找不到src目录,
到官网下载对应版本的源码
4.7.4 安装要求 1.8G,安装路径 D:\Qt\4.7.4


数据库连接测试:

环境:
MySql version 5.1.71-log @ Linux
Qt4 consol app SQLtest @ WindowsXP
要求:
MySql客户端运行在XP上,从Linux上执行一条查询语句。

点击(此处)折叠或打开

  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2014-04-16T16:39:00
  4. # filename: SQLtest.pro
  5. #-------------------------------------------------

  6. QT += core
  7. QT -= gui
  8. QT += sql


  9. TARGET = SQLtest
  10. CONFIG += console
  11. CONFIG -= app_bundle

  12. TEMPLATE = app


  13. SOURCES += main.cpp


点击(此处)折叠或打开

  1. /*
  2. Qt mysql driver demo.
  3. pz @ 2014-4-16
  4. */

  5. #include <QtCore/QCoreApplication>
  6. #include <QtSql>

  7. #if 0
  8. // print avalib DB drivers.
  9. int main(int argc, char *argv[])
  10. {
  11.         QCoreApplication a(argc, argv);
  12.         qDebug() << "Available drivers:";
  13.         QStringList drivers = QSqlDatabase::drivers();
  14.         foreach(QString driver, drivers)
  15.             qDebug() << "\t " << driver;
  16.         qDebug() << "End";

  17.         return a.exec();
  18. }
  19. #else

  20. // SELECT from mysql
  21. int main(int argc, char *argv[])
  22. {
  23.         QCoreApplication app(argc, argv);
  24.         QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
  25. #if 0
  26.         db.setHostName("192.168.1.130"); // 远程linux上的数据库
  27.         db.setDatabaseName("test"); // 数据库名
  28.         db.setUserName("root"); // 用户
  29.         db.setPassword("123456"); // 密码
  30. #else
  31.         db.setHostName("localhost"); // 本机xp上的数据库地址
  32.         db.setDatabaseName("world"); // 数据库名
  33.         db.setUserName("root"); // 用户
  34.         db.setPassword("123456"); // 密码
  35. #endif
  36.         if (db.open()) {
  37.                 QSqlQuery query;
  38.                 #if 0
  39.                 query.exec("SELECT sid,sname,age FROM student");
  40.                 query.next();
  41.                 QString name = query.value(1).toString();
  42.                 qDebug() << "first student's name=" << name;
  43.                 #else
  44.                 query.exec("SELECT count(*) FROM country");
  45.                 query.next();
  46.                 int cnt = query.value(0).toInt();
  47.                 qDebug() << "country number allover the world:" << cnt;
  48.                 #endif

  49.         } else {
  50.                 qDebug() << "Open DB fail:" << db.lastError().text();
  51.         }
  52.         return app.exec();
  53. }

  54. #endif




阅读(5107) | 评论(0) | 转发(0) |
1

上一篇:QTP简介

下一篇:Qt编写WebService客户端

给主人留下些什么吧!~~