此文档针对 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 内容如下
点击(此处)折叠或打开
- #include <QtCore/QCoreApplication>
- #include <QtSql>
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- qDebug() << "Available drivers:";
- QStringList drivers = QSqlDatabase::drivers();
- foreach(QString driver, drivers) qDebug() << "\t " << driver;
- qDebug() << "End";
- return a.exec();
- }
Available drivers:
"QSQLITE"
"QMYSQL3"
"QMYSQL"
End
其中有"QMYSQL"则表示编译mysql的驱动成功了!!
注1:
MySQL v5.6.17 官方正式版
http://mysql.llarian.net/Downloads/MySQL-5.6/mysql-5.6.17-win32.zip
安装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上执行一条查询语句。
点击(此处)折叠或打开
- #-------------------------------------------------
- #
- # Project created by QtCreator 2014-04-16T16:39:00
- # filename: SQLtest.pro
- #-------------------------------------------------
- QT += core
- QT -= gui
- QT += sql
- TARGET = SQLtest
- CONFIG += console
- CONFIG -= app_bundle
- TEMPLATE = app
- SOURCES += main.cpp
点击(此处)折叠或打开
- /*
- Qt mysql driver demo.
- pz @ 2014-4-16
- */
- #include <QtCore/QCoreApplication>
- #include <QtSql>
- #if 0
- // print avalib DB drivers.
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- qDebug() << "Available drivers:";
- QStringList drivers = QSqlDatabase::drivers();
- foreach(QString driver, drivers)
- qDebug() << "\t " << driver;
- qDebug() << "End";
- return a.exec();
- }
- #else
- // SELECT from mysql
- int main(int argc, char *argv[])
- {
- QCoreApplication app(argc, argv);
- QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
- #if 0
- db.setHostName("192.168.1.130"); // 远程linux上的数据库
- db.setDatabaseName("test"); // 数据库名
- db.setUserName("root"); // 用户
- db.setPassword("123456"); // 密码
- #else
- db.setHostName("localhost"); // 本机xp上的数据库地址
- db.setDatabaseName("world"); // 数据库名
- db.setUserName("root"); // 用户
- db.setPassword("123456"); // 密码
- #endif
- if (db.open()) {
- QSqlQuery query;
- #if 0
- query.exec("SELECT sid,sname,age FROM student");
- query.next();
- QString name = query.value(1).toString();
- qDebug() << "first student's name=" << name;
- #else
- query.exec("SELECT count(*) FROM country");
- query.next();
- int cnt = query.value(0).toInt();
- qDebug() << "country number allover the world:" << cnt;
- #endif
- } else {
- qDebug() << "Open DB fail:" << db.lastError().text();
- }
- return app.exec();
- }
- #endif