vc mysql.h_VC使用mysql.h的接口头文件进行连接mysql数据库开发的完整解决方案

VC++6.0连接MySQL的配置过程

VC使用mysql.h的接口头文件进行连接mysql数据库开发

摘要:前几天搞一个VC程序,目的是连接MYSQL服务器,做查询数据,等各种操作。我没有选择ADO,也没有使用ODBC这样的方式,貌似ODBC还需要配置服务端的ODBC设置,所以觉得很麻烦,不适合我追求完美的个性。于是找了MSYQL提供的官方API,不得不承认,他们的东西真的做的不错。但是,由于第一次使用,网上的参考资料又不完整,还不能解决我遇到的所有问题。不过,最终在我的各种奇思异想之下,还是解决了,现把完整的步骤和遇到的问题的解决办法给写出来,以求能帮助到遇到问题的朋友。共享精神嘛!大家好,才是真的好!呵呵

用C连接MySQL,在Win7下用VC++6.0连接MySQL数据库,可能发生的错误:

……\libmysql.lib : fatalerror LNK1113: invalid machine type。

发生这个错误的原因是,我在win7上安装的是64bit的mysql服务器(因为之前想在64bit的win7上安装64bit的程序会看起来好些;实际上64bit的win7系统上对32bit的应用程序兼容还可以的),而我编译32位的VC程序,连接的是64位的libmysql.lib库,所以会产生 “无效的机器类型(invalid machine type)”的错误提示。

对于这个“error LNK1113”错误的解决方案是:

下载32位的mysql的zip包,大概100多M的那个。解压出来,把lib目录按照,第5步定位lib。这样的话,我们的32位程序编译的时候,链接的就是32位的库,就不会出现上面的链接错误了。也不必换到xp系统上去操作了。

环境说明:

操作系统:windows 7

开发工具:VC++6.0

开发的exe:32位程序

数据库服务器:64位的mysql-5.5.20-winx64.msi(33M),运行在win7上,即localhost,

引用的数据库lib:32位的mysql-5.5.20-win32.zip(146M)的lib文件夹。

步骤如下:

1.  到官网www.mysql.com下载MySQL安装包:

mysql-essential-5.1.52-win32.msi

当然你也可以下载安装mysql*.zip,这个要配置my.ini配置文件,会比较麻烦,生手不一定会在短时间内配置成功。

2.  安装mysql,在安装过程中如(如果是.msi安装),一定要选上C Include Files / Lib Files,这样在安装后才能在mysql的安装文件夹中找到include和lib文件夹,这些文件夹将在下面的操作用会用到。

3.  把[MySQL安装目录]\MySQL Server 5.5\bin下的libmySQL.dll复制并拷贝到C:\WINDOWS\system32下。(这一步我没有做,一样可以编译通过,我是在WIN7下验证的,不知在XP或是win-NT中是否需要这一步)。

4.  在VC++6.0建立一个工程,打开:工具(tools)->选项(options),在弹出的“选项”对话框中,点击“目录(directories)”标签,可以看到一个:“显示目录为”的下拉框,选择“include files”选项,在其中加入:[MySQL安装目录]\MySQLServer 5.5\include\ 这个目录,如图1。这样在编译时就可以使用#include 找到mysql.h文件。

0818b9ca8b590ca3270a3433284dd417.png

图1

当然,你也可以不进行第4步,直接把 “[MySQL安装目录]\MySQLServer 5.0\include\” 文件夹拷贝到当前工程目录。然后在程序中使用 #include"include\mysql.h" 包含头文件。

5.  设置步骤4后,只是保证编译通过,但是连接出错。连接时需要用到lib文件,lib文件一般是函数定义编译后的库文件,必须使程序链接时找到这个文件。打开:工具->选项菜单,找到“目录”标签,可以看到有一个:“显示目录为”的下拉框,选择Library files选项,在其中加入: 【32位的mysql zip解压文件夹】\MySQLServer 5.5\lib\,如图2。

0818b9ca8b590ca3270a3433284dd417.png

图2

然后在:工程->设置,找到link选项卡,在对象/库模块下面的输入框中的库列表的最后面加入:libmysql.lib。如图3。

0818b9ca8b590ca3270a3433284dd417.png

图3

6.  编译链接,运行即可。

运行之前还有关键的一点:必须把32位 mysql的lib目录下的libmysql.dll 这个动态链接库,复制到当前工程的debug目录。也就是说,这个动态库必须和运行的exe程序放在一起。假如你要这个exe程序放到别处运行,那么你也必须一起复制libmysql.dll 。

7.  下面是一个可以运行的小例子,只要建立win32 consoleAplication工程,建一个C文件,把代码复制到C文件中,只要按上述配置就能运行。

#include

#include

#include

#include "include\mysql.h"

//#pragma comment(lib,"libmysql.lib") //这句加了貌似没有用。

using namespace std;

int fetchsqldb(char *mysql_host);

int main()

{

charinput_buf[256];

charhost[256];

while(cout<

{

switch(input_buf[0])

{

case'q': return 0;

case'1':

cout<

while(gets(host))

{

fetchsqldb(host);

break;

}

break;

case'2':

fetchsqldb("192.168.111.100");

break;

default:

cout<

}

}

return0;

}

//查询函数,入参mysql_host 为数据库服务器的IP地址。

int fetchsqldb(char *mysql_host)

{

intt = 0, i = 0;

charquery_buf[2048];

MYSQL_RES*res;

MYSQL_ROWrow;

MYSQL mysql;

cout<

mysql_init(&mysql);

//root:MYSQL数据库服务器的用户名;aaapwd:为对应用户名的密码;mydbtest:是连接之后选择的的数据库,3306:是服务器端口号;

//后面参数的意义的可以查看mysql的官方手册,地址是:

if(mysql_real_connect(&mysql,mysql_host, "root", "aaapwd", "mydbtest", 3306, NULL, 0))

{

cout<

}

else

{

mysql_errno(&mysql);

constchar *s = mysql_error(&mysql);

cout<

return1;

}

strcpy(query_buf,"select * from mytable1");

t= mysql_query(&mysql, query_buf);

if(t)

{

cout<

return1;

}

else

{

cout<

}

//获取数据集,并根据获取的行数和列数打印查询到的表的内容

res= mysql_use_result(&mysql);

for(i = 0; ;i++) //mysql_field_count(&mysql),i

{

row= mysql_fetch_row(res);

if(row<= 0)

break;

for(t= 0; t < mysql_num_fields(res); t++)

cout<

cout<

}

cout<

mysql_close(&mysql);

return0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值