VS在win32平台与mysql链接_mysql5.5.28-win32 + qt--4.8.2-vs2008 数据库驱动编译与连接...

我们来编译配置qt的mysql数据库驱动,首先看看官方文档的说明,如下

How to Build the QMYSQL Plugin on Windows

You need to get the MySQL installation files.

RunSETUP.EXEand choose "Custom Install".

Install the "Libs & Include Files" Module. Build

the plugin as follows (here it is assumed that MySQL is installed

inC:\MySQL):

cd %QTDIR%\src\plugins\sqldrivers\mysql

qmake "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MYSQL\MySQL Server \lib\opt\libmysql.lib" mysql.pro

nmake

If you are not using a Microsoft compiler,

replacenmakewithmakein

the line above.

Note:This database plugin is not

supported for Windows CE.

Note:Including"-o

Makefile"as

an argument toqmaketo

tell it where to build the makefile can cause the plugin to be

built in release mode only. If you are expecting a debug version to

be built as well, don't use

the"-o Makefile"option.

How to build the MySQL driver for MinGW users

The following steps have been used successfully for WinXP SP3.

In this example, Qt 4.6.2 is shown.

Download the following components:

MinGW-5.1.6.exe

mingw-utils-0.3.tar.gz

Qt sources, e.g.qt-everywhere-opensource-src-4.6.2.zip

mysql-5.1.35-win32.msi

InstallMinGW-5.1.6.exein,

e.g.C:\MinGW.

Extractmingw-utils-0.3.tar.gzinto,

e.g.C:\MinGW.

Add the path forMinGW-5.1.6.exeto

yourPATHvariable,

e.g.C:\MinGW\bin;

Extract the Qt sources, (qt-everywhere-opensource-src-4.6.2.zip),

into, e.g.C:\Qt.

Add the path for the eventual Qt binary to yourPATHvariable,

e.g.C:\Qt\4.6.2\bin;.

Install MySQL (mysql-5.1.35-win32.msi), customizing the

components. Select only the headers and libraries. Install in,

e.g.C:\MySQL\MySQL51.

Open the DOS prompt, go toC:\MySQL\MySQL51\lib\opt, and run the

following commands:

reimp -d libmysql.lib

dlltool -k -d libmysql.def -l

libmysql.a

Open the DOS prompt, go toC:\Qt\4.6.2and run the following

commands:

configure.exe -debug-and-release

-platform win32-g++ -qt-sql-mysql -l mysql -I

C:\MySQL\MySQL51\include -L C:\MySQL\MySQL51\lib\opt

mingw32-make sub-src

This step takes a long time.

Open the DOS prompt, go toC:\Qt\4.6.2\src\plugins\sqldrivers\mysqland

run the following command:

qmake

"INCLUDEPATH+=C:\MySQL\MySQL51\include" "LIBS+=-L. mysql"

mysql.pro

Now the following libraries are ready inC:\Qt\4.6.2\plugins\sqldrivers.

libqsqlmysql4.a

libqsqlmysqld4.a

qsqlmysql4.dll

qsqlmysqld4.dll

To use the SDK and QtCreator directly, copy these libraries to

yourC:\Qt\...\qt\plugins\sqldrivers\, and

copyC:\MySQL\MySQL51\lib\opt\libmysql.dllto

yourC:\Qt\...\qt\bin\.

我在安装配置过程中首先参考的第二条,即"for MingW Users",但不管怎样添加环境变量总是报

" 'mingw32-make'不是内部或外部命令 "错误,将mingw32-make.exe直接拷贝到

C:\Qt\4.8.2\bin目录下报如下错误

C:\Qt\2010.02.1\bin;

C:\Qt\2010.02.1\qt\bin;

C:\Qt\2010.02.1\mingw\bin;

C:\mysql\lib\opt;

C:\mysql\include;

C:\mysql\bin

分别对应我的环境变量

C:\Qt\4.8.2\bin;

C:\Qt\4.8.2\mingw\bin(原目录不存在,新建了mingw文件夹,再将

C:\MinGW\bin文件拷贝到新建的mingw文件中);

C:\MySQL\lib(同样opt目录不存在,

因为libmysql.lib在lib文件加下,所以没有影响);

C:\MySQL\include; C:\MySQL\bin;

C:\MinGW\bin

添加完环境变量后运行 mingw32-make出现上述错误,在dos

命令行下set path查看

环境变量如下a4c26d1e5885305701be709a3d33442f.png

在qt command prompt中set path查看环境变量如下

a4c26d1e5885305701be709a3d33442f.png

可以看到,在qt command下没有C:\MinGW\bin路径,原因不明,求解释。

在网上参考了很多资料,mingw32-make编译配置qt mysql驱动仍不成功,最后直接nmake

编译成功了。

我的nmake编译过程如下,

1

由于MySQL的默认安装路径中有空格,qmake工具无法编译,所以先把MySQL安装目录下的include和lib目录拷贝到没有空格的路径下,比如C:\MySQL(这步很重要)

2.打开Qt Command Prompt(注意是qt

command,而不是dos command,因为dos 可能无法识别qmake,nmake等

命令),输入命令:cd

%QTDIR%\src\plugins\sqldrivers\mysql按回车键,然后输入命令:

qmake “INCLUDEPATH+=C:\mysql\include”

“LIBS+=C:\mysql\lib\opt\libmysql.lib” mysql.pro,按回车键,报如下错误

WARNING: (internal):1: d backslashes are

deprecated. 这种错误的解决方法如下:

(1)进入目录E:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql,用记事本打开mysql.pro,在第二行添加如下的信息:INCLUDEPATH+="C:\MySQL\include"

LIBS+="C:\MySQL\lib\opt\libmysql.lib"

(2)在dos下输入:qmake -o

Makefile mysql.pro此时可能也会提示:

WARNING: e:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2:

d backslashes are

deprecated.

WARNING: e:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2:

d backslashes are

deprecated.

WARNING: e:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2:

d backslashes are

deprecated.

但是对最后的结果没有影响。

3.nmake

4.nmake release

C:\Qt\4.8.2\src\plugins\sqldrivers\mysql\debug下的libqsqlmysqld4.a和qsqlmysqld4.dll文件拷贝到Qt安装目录\plugins\sqldrivers目录下,这样只生成了Qt在Debug模式下的MySQL驱动。在输入命令mingw-32

make

release编译Release模式下的MySQL驱动,编译成功后将Qt安装目录\src\plugins\sqldrivers\mysql\release下的libqsqlmysqld4.a和qsqlmysqld4.dll文件拷贝到Qt安装目录\plugins\sqldrivers目录下,这样就完成了Qt在Release模式下的MySQL驱动。

注意,我最终编译生成的只有qsqlmysql4.dll,

qsqlmysql4d.lib, qsqlmysql4.dll, qsqlmysql4.lib等文件,

并没有libmysqld4.a与libmysql4.a等文件,但将上述存在的4个文件拷到C:\Qt\4.8.2\plugins\sqldrivers目录下测试仍然通过,可用。

执行以上步骤后测试出现

QSqlDatabase: QMYSQL driver not loaded

将C:/MySQL/bin目录下的libmySQL.dll文件复制到Qt安装目录下的C:\Qt\4.8.2\bin目录中

之后再运行测试程序即可正确建立连接并操作数据库。

参考:

测试如下

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

// 连接mysql测试

bool createConnection()

{

QSqlDatabase db =

QSqlDatabase::addDatabase("QMYSQL");

db.setHostName("localhost");

db.setDatabaseName("test");

db.setUserName("root");

db.setPassword("test");

if(!db.open())

{

QMessageBox::critical( 0,

QObject::tr("Database error"), db.lastError().text());

return false;

}

return true;

}

int main(int argc, char *argv[])

{

QApplication app(argc,argv);

if(!createConnection())

return 1;

QSqlQuery query;

query.exec("insert into test

values(1,'test')");

return app.exec();

}

使用Mysql workbench工具查看对应数据库即可。

若报"qsqldatabase"文件找不到等错误,则

到qt的安装目录下将对应的头文件添加到include中,或者将依赖的库文件或头文件加到系统环境变量中

与项目的附加依赖库中,注意,include目录与lib目录应分别添加。

如我的相关头文件为和,打开cmd,输入set

path可查看

已有环境变量,Qt相关的为

C:\Qt\4.8.2\lib;

C:\Qt\4.8.2;

如果还不行,最笨的方法,输入完整路径,如

include

若出现“无法解析的外部符号”错误,

则在VS

2008 的 Qt 菜单下点击"qt project settings" 选项, 点击"qt

modules"标签,

勾选需添加的对应模块,即sql library即可。

参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA知识学习——类的修饰符

Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非访问控制符两大类。修饰符之间的先后排列次序对类的性质没有任何影响。一,非访问修饰符。 1…

神秘的数组初始化_I / O神秘化

神秘的数组初始化由于对高度可扩展的服务器设计的所有炒作以及对Node.js的狂热,我一直想重点研究IO设计模式,直到现在为止都没有足够的时间进行投资。 现在已经做了一些研究,我认为最好记下我遇到的东西,作为对我以及可能遇到这篇…

mysql characteristic_MySQL存储过程定义中的特性(characteristic)的含义

MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容…

hive 案例分析

转自 http://www.cnblogs.com/guanhao/p/5641675.html 1. 创建数据库,切换数据库 create database testdb2; use testdb2; 2. 创建管理表 create table emp( empno int, empname string, job string, mgr int, hiredate string, salary double, comm double, deptn…

BeanUtils包的使用

BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作。 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: (1) BeanUtils相关包 commons-beanutils-1.8.3.jar commons-beanutils-1.8.3-javadoc.jar commons-beanuti…

使用JMX作为Ganglia的现代替代品进行CLDB监视

有许多选项可用于监视MapR集群的性能和运行状况。 在本文中,我将介绍使用Java管理扩展(JMX)监视CLDB的鲜为人知的方法。 据最受尊敬的MapR数据工程师之一,Akihiko Kusanagi称,与使用Ganglia相比,使用JMX来…

python 多线程并发怎么还是顺序执行_python thread 并发且顺序运行示例

python怎么实现用多线程顺序执行python 的GIL规定每个时刻只能有一个线程访问python虚拟机,所以你要用python的多线程来做计算是很不合算的,但是对于IO密集型的应用,例如网络交互来说,自己把自己说服了,是一种理智的胜利;自己被自己感动了,是…

markdown pad激活

<iframe src"https://cn.calcuworld.com/%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6%e8%ae%a1%e7%ae%97%e5%99%a8?iframe1" width"100%" height"400"></iframe> ---恢复内容开始--- 注册码 Soar360live.com GBPduHjWfJU1mZqcPM3BikjYKF…

Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?

在最初的 http 协议中&#xff0c;没有上传文件方面的功能。RFC1867&#xff08;"Form-based File Upload in HTML".&#xff09; 为 http 协议添加了这个功能。客户端的浏览器&#xff0c;如 Microsoft IE, Mozila, Opera 等&#xff0c;按照此规范将用 户指定的文件…

pytest单侧模块_入门汇总

Pytest简单介绍 &#xff08;pytest是python的一个测试框架&#xff0c;主要是用来进行一些小的测试&#xff09; 安装&#xff1a;pip install -U pytest查看是否安装成功&#xff1a;pytest --version运行&#xff1a;在当前文件所在目录下执行pytest&#xff0c;会寻找当前目…

pythonreshape函数三个参数_详解numpy.ndarray.reshape()函数的参数问题

我们知道numpy.ndarray.reshape()是用来改变numpy数组的形状的&#xff0c;但是它的参数会有一些特殊的用法&#xff0c;这里我们进一步说明一下。代码如下&#xff1a;import numpy as npclass Debug:def __init__(self):self.array1 np.ones(6)def mainProgram(self):print(…

javafx 和swing_集成JavaFX和Swing

javafx 和swing我刚刚完成了对使用Swing的应用程序组件的重写&#xff0c;现在正在使用JavaFX&#xff0c;最后得到了与更大的swing应用程序集成的JavaFX组件。 这是一个很大的应用程序&#xff0c;重写花了我一段时间&#xff0c;最后一切都很好&#xff0c;我很高兴自己做到了…

servlet.jar--jar not loaded错误

出错信息&#xff1a;validateJarFile(D:\Program Files\apache-tomcat-6.0.29\webapps\BookShop\WEB-INF\lib\servlet.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 造成这种错误的原因有两个&#xff1a;serv…

练习6.6

6.6&#xff1a;说明形参、局部变量以及局部静态变量的区别。编写一个函数&#xff0c;同时用到这三种形式。 Ans&#xff1a;形参及函数体内定义的变量&#xff0c;都是局部变量&#xff0c;必须进行初始化&#xff0c;否则会出现未定义行为&#xff0c;这是由于局部变量的生命…

java map 最大值_MAP集合选出最大值

import java.util.Arrays;import java.util.HashMap;import java.util.Map;import org.junit.Test;public class TestHashMap {//统计各空气质量的最高值Testpublic void test1(){String pm25 "农展馆423,东四378,丰台花园406,天坛322,海淀区万柳398," "官园40…

Apache Hadoop HDFS数据节点Apache Mesos框架

介绍 该项目允许在Mesos上运行HDFS。 您应该熟悉HDFS和Mesos基础知识&#xff1a; http://mesos.apache.org/documentation/latest/ https://hadoop.apache.org/docs/r2.7.2/hdfs_design.html 项目要求&#xff1a; Mesos 0.23.0 JDK 1.7.x Hadoop 1.2.x或2.7.x 流浪汉 …

java byte 转 c_C 和 Java 之间的byte数据的转换问题

C语言里通常可能开发人员直接定义struct 作为数据包,因此在java客户端接收struct 中的数据时候,受整数等类型的高低位存放的影响,需要进行相应的转换,参考:转换代码如下:package com.lizongbo.util;/**** Title: 数字转换工具类** Description: 将数字类型与byte数组互相转换**…

MyEclipse中如何设置 jdk 和 jre 编译运行环境

MyEclipse设置JDK和JRE具体的应用版本其实很简单&#xff0c;分为三种状况&#xff1a; 1、设置默认使用的JDK和JRE环境。 具体步骤&#xff1a;菜单window-preferences-java-Installed JRES。 点中了&#xff0c;右边的窗口点ADD按钮&#xff0c;记住选择添加安装了Java目录下…

dubbo集群服务下一台服务挂了对服务调用的影响

一、问题描述&#xff1a;项目中2台dubbo服务给移动端提供查询接口&#xff0c;移动端反应说查询时而很快(秒刷)&#xff0c;时而很慢(4-5秒)。 二、问题分析&#xff1a; 1、问题猜想&#xff1a;网络不稳定原因导致&#xff0c;但是切换公司wifi和手机4G,问题依旧存在。说明问…

C89与C99标准比较

1、增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符&#xff0c;它是初始访问指针所指对象的惟一途径&#xff0c;因此只有借助restrict指针表达式才能访问对象。restrict指针指针主要用做函数变元&#xff0c;或者指向由malloc()函数所分配的内存变量。restri…