qt4 mysql驱动下载_qt4:windows下安装qt4及编译mysql5驱动程序全过程

windows下qt4编译mysql5驱动程序全过程

1.安装dev-cpp 安装到c:/dev-cpp

解压缩并放到c:/mysql文件夹中.为了让mysql把自己的信息写入注册表最好执行一下bin目录下的mysqld.exe文件(鼠标双击即可)

3.安装qt4的开源版

安装到c:/qt/

安装过程中会询问mingw的位置指定c:/dev-cpp

4.设置系统变量

方法是:我的电脑->右键属性->高级->环境变量.如果有些变量已经存在就添加没有就创建出来

Path=c:/qt/4.3.2/bin;c:/Dev-Cpp/bin;c:/mysql;C:/Qt/4.3.2/include (这个是添加的部分)

QMAKESPEC=win32-g++(这两个是创建的)

QTDIR=c:/qt/4.3.2

5.随意编写一个程序测试程序能否编译执行,如果能通过的话继续下面的步骤否则根据错误提示修改相关内容

例如: qmake -project

qmake  xx.pro

make

在release文件夹中就可以找到可执行文件了.

7.进入mysql文件夹:

cd c:/mysql/lib/opt  生成def文件  c:/mysql/lib/opt>reimp -d libmysql.lib

8.进入qt的mysql文件夹   指定def : C:/mysql/lib/opt>dlltool -k -d libmysql.def -l libmysql.a  生成makefile文件: (注意下面的命令很长参数也比较多不能写错)

C:/Qt/4.3.2/src/plugins/sqldrivers/mysql.bak>qmake -o Makefile "INCLUDEPATH+=C:/MYSQL/INCLUDE"   "LIBS+=C:/MYSQL/LIB/OPT/LIBMYSQL.a" mysql.pro

9.运行mingw32-make生成mysql的动态库驱动程序文件  之间可能会出错

1) D:/Qt/4.3.2/src/plugins/sqldrivers/mysql>mingw32-make  mingw32-make -f Makefile.Release

Makefile.Release:104: *** multiple target patterns.  Stop.

mingw32-make[1]: Entering directory `D:/Qt/4.3.2/src/plugins/sqldrivers/mysql'

mingw32-make[1]: Leaving directory `D:/Qt/4.3.2/src/plugins/sqldrivers/mysql'

mingw32-make: *** [release] Error 2

对于这种错误是生成的makefile文件格式有问题最好把前边的工作从头再来一次,也可以这么修改,但是好像还会有其它错误出现,等待高手指点了.主要原因是由于有些特殊字符无法看到造成的,我是通过notepad2才看出来的.

0818b9ca8b590ca3270a3433284dd417.png

2).在编译的过程中可能会出现"mysql.h"文件找不到的提示,修改C:/Qt/4.3.2/src/sql/drivers/mysql文件夹下的qsql_mysql.h文件的第49行,指定mysql.h文件的具体位置,例如 #include

3).  C:/Qt/4.3.2/src/plugins/sqldrivers/mysql>mingw32-make

mingw32-make -f Makefile.Release

mingw32-make[1]: Entering directory `C:/Qt/4.3.2/src/plugins/sqldrivers/mysql'

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-rel

oc -Wl,-s -mthreads -Wl -shared -Wl,--out-implib,c:/Qt/4.3.2/plugins/sqldrivers/

libqsqlmysql4.a -o "../../../../plugins/sqldrivers/qsqlmysql4.dll" tmp/obj/relea

se_shared/main.o tmp/obj/release_shared/qsql_mysql.o tmp/obj/release_shared/moc_

qsql_mysql.o  -L"c:/Qt/4.3.2/lib" -L"c:/Qt/4.3.2/lib" tmp/obj/release_shared/qsq

lmysql_resource_res.o C:/MYSQL/LIB/OPT/LIBMYSQL.a -llibmysql -lQtSql4 -lQtCore4

c:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/bin/ld.exe: cannot f

ind -llibmysql

collect2: ld returned 1 exit status

mingw32-make[1]: *** [../../../../plugins/sqldrivers/qsqlmysql4.dll] Error 1

mingw32-make[1]: Leaving directory `C:/Qt/4.3.2/src/plugins/sqldrivers/mysql'

mingw32-make: *** [release] Error 2

在编译过程中可能会出现"llibmysql文件找不到"的提示拷贝你生成的libmysql.lib文件到C:/Qt/4.3.2/lib文件夹下就可以编译通过了

10.改正以上错误后,编译会通过.你就可以看到mysql的驱动程序了.注意路径和这两个文件的创建日期

0818b9ca8b590ca3270a3433284dd417.png

11.进入mysql的bin文件夹执行mysqld.exe启动mysql的服务    C:/>cd mysql/bin                         //进入可执行文件目录

C:/>cd mysql/bin/mysqld.exe    //启动服务(如果前边启动过了就跳过)

C:/mysql/bin>mysql.exe -u root //由于还没有给root设置密码所以这里直接登录,有些系统可能会失败

Welcome to the MySQL monitor.  Commands end with ; or /g. Your MySQL connection id is 1

Server version: 5.1.22-rc-community MySQL Community Server (GPL)

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

mysql> quit                                  //退出客户端

Bye

12.修改root用户的密码  C:/mysql/bin>mysqladmin.exe -u root -p password "123456"  //修改root密码为 123456

Enter password:      

测试空密码能否登录 C:/mysql/bin>mysql.exe -u root                  //这时空密码已经不能登录了

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

13.登录mysqloC:/mysql/bin>mysql.exe -u root -p                     //登录时指定需要输入密码就可以登录了Enter password: ******

Welcome to the MySQL monitor.  Commands end with ; or /g.

Your MySQL connection id is 4

Server version: 5.1.22-rc-community MySQL Community Server (GPL)

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

创建数据库mysql> create database mydata;Query OK, 1 row affected (0.00 sec)

使用数据库mysql> use mydata;Database changed

创建表mysql>  CREATE TABLE employee (

->      id CHAR(3),

->      lastname VARCHAR(30),

->      firstname VARCHAR(20),

->      dob DATETIME,

->      phone VARCHAR(10)

->      );Query OK, 0 rows affected (0.01 sec)

察看表是否创建成功mysql> show tables;+------------------+

| Tables_in_mydata |

+------------------+

| employee         |

+------------------+

1 row in set (0.00 sec)

插入两条测试数据

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)

察看数据是走插入成功

mysql> select * from employee;+------+----------+-----------+---------------------+-------+

| id   | lastname | firstname | dob                 | phone |

+------+----------+-----------+---------------------+-------+

| 001  | 热       | X         | 2000-05-18 00:00:00 | 5188  |

| 002  | 包       | 子        | 2000-05-18 00:00:00 | 5198  |

+------+----------+-----------+---------------------+-------+

2 rows in set (0.00 sec)

mysql> select version();+----------------------------+

| version()                      |

+----------------------------+

| 5.0.22-community-nt |

+-----------------------------+

1 row in set (0.00 sec)

13.创建应用程序测试数据库是否可以使用#include

#include

#include

#include

#include

#include

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("mydata"); // 我们之前建立的数据库

db.setUserName("root"); // 我们创建的 yunfan 用户名

db.setPassword("123456"); // 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

{ // 如果查询失败,返回错误

display.append("From mysql database: Error");

}

}

else

{ // 打开数据库失败,显示数据库失败

display.append("cannot open database.");

display.append("Reason: database error");

}

QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));

return app.exec();

}

下图为实际运行效果

0818b9ca8b590ca3270a3433284dd417.png

14.这两个新生成的mysql的驱动程序可以拷贝到其它系统中使用,也就是说一个系统里编译的驱动可以在其它系统中使用,只要拷贝到相应的目录就可以了.至于是否和其它不同版本的mysql能否配合使用没有测试.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值