原文:
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 内容如下
-
#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的驱动成功了!!
安装MySql 到 check requirements 时卡住,visual studio tools for office 2010 runtime通不过。
注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
阅读(5282) | 评论(0) | 转发(0) |