C连接MySQL数据库开发 --http://blog.youkuaiyun.com/xyang81/article/details/26814633

本文详细介绍如何在Windows环境下使用VS2013配置C语言项目来连接MySQL数据库,并提供了测试示例代码。

C连接MySQL数据库开发之Windows环境配置及测试

原创  2014年05月24日 15:42:10
一、开发环境

Win8.1 64位、VS2013、MySQL5.5.3764位

MySQL安装目录为:C:\Program Files\MySQL\MySQL Server 5.5

二、配置工程环境
首先创建一个控制台空项目,打开VS2013,文件--> 新建项目 --> 常规 --> 选择“空项目”


      因为我们要使用MySQL数据库的API接口编程,所以需要将工程的附加头文件搜索目录和附件库文件搜索目录,指向MySQL安装目录对应的位置,下面是我机子上mysql库和头文件目录:


将VS2013工程的附加头文件目录和附加库目录指向上面两个目录。

1> 配置头文件目录
打开工程配置属性窗口--> C/C++ --> 常规 --> 附加包含目录,把mysql的include目录添加到附加包含目录中,如下图所示:





2> 配置库文件目录
打开工程配置窗口--> 链接器--> 常归 --> 附加库目录,把mysql的lib目录添加到附加库目录中,如下图所示:


打开工程配置窗口--> 链接器--> 输入-->附中依赖项 ,打libmysql.lib静态库添加到工程编译依赖项,如下图所示:





libmysql.dll动态库拷贝到工程的根目录或Debug目录下:



三、测试开发环境

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <windows.h>  
  4. #include <mysql.h>  
  5.   
  6. void testQuery(MYSQL *mysql);   // 测试查询数据  
  7.   
  8. void main()  
  9. {  
  10.     MYSQL *mysql = NULL;  
  11.   
  12.     /*初始化MYSQL连接句柄*/  
  13.     mysql = mysql_init((MYSQL *)0);  
  14.     if (!mysql)  
  15.     {  
  16.         return;  
  17.     }  
  18.   
  19.     /* 
  20.         连接数据库,连接成功返回conn,否则返回NULL 
  21.         参数1:mysql_init初始化数据库返回的MYSQL句柄 
  22.         参数2:数据库服务器地址 
  23.         参数3:数据库用户名 
  24.         参数4:数据库密码 
  25.         参数5:数据库名称 
  26.         参数6:数据库端口,为0表示默认3306 
  27.         参数7:如果unix_socket不是NULL,字符串指定套接字或应该被使用的命名管道。注意host参数决定连接的类型 
  28.         参数8:通常是0 
  29.     */  
  30.     mysql = mysql_real_connect(mysql, "localhost","root""root",   
  31.         "test", 0, NULL, 0);  
  32.     if (mysql)  
  33.     {  
  34.         printf("connection succellfull the database!\n");  
  35.     }  
  36.     else  
  37.     {  
  38.         printf("connection error:%d, %s\n",mysql_errno(mysql), mysql_error(mysql));  
  39.     }  
  40.   
  41.     // 查询数据  
  42.     testQuery(mysql);  
  43.   
  44.     // 关闭连接  
  45.     mysql_close(mysql);  
  46.   
  47.     system("pause");  
  48. }  
  49.   
  50. // 测试查询  
  51. void testQuery(MYSQL *mysql)  
  52. {  
  53.     MYSQL_ROW row;  
  54.     MYSQL_RES *res = NULL;  
  55.     MYSQL_FIELD *fields = NULL;  
  56.     int i, field_count;  
  57.     char *sql = "select * from t_user";  
  58.     int flag = mysql_real_query(mysql, sql, (unsigned long)strlen(sql));  
  59.     if (flag)  
  60.     {  
  61.         printf("Query error:%d, %s\n",mysql_errno(mysql), mysql_error(mysql));  
  62.         return;  
  63.     }  
  64.   
  65.     // 将查询结果读到内存当中  
  66.     res = mysql_store_result(mysql);  
  67.   
  68.     // 获取结果集中的所有字段  
  69.     fields = mysql_fetch_fields(res);  
  70.   
  71.     // 字段数量  
  72.     field_count = mysql_field_count(mysql);  
  73.     for (i = 0; i < field_count; i++)  
  74.     {  
  75.         printf("%s\t", fields[i].name);  
  76.     }  
  77.   
  78.     printf("\n");  
  79.       
  80.     // 遍历结果集的每一行数据  
  81.     while (row = mysql_fetch_row(res))  
  82.     {  
  83.         for (i = 0; i < field_count; i++)  
  84.         {  
  85.             printf("%s\t", row[i]);  
  86.         }  
  87.         printf("\n");  
  88.     }  
  89. }  

mysql测试数据及表结构:

[sql]  view plain  copy
  1. DROP TABLE IF EXISTS `t_user`;  
  2. CREATE TABLE `t_user` (  
  3.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  4.   `namevarchar(32) DEFAULT NULL,  
  5.   `age` int(11) DEFAULT NULL,  
  6.   `address` varchar(100) DEFAULT NULL,  
  7.   PRIMARY KEY (`id`)  
  8. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;  
  9.   
  10. LOCK TABLES `t_user` WRITE;  
  11. INSERT INTO `t_user` VALUES (1,'zhangsan',22,'hunan'),(2,'lisi',30,'beijin');  
  12. UNLOCK TABLES;  
测试结果:



小结配置步聚:

1> 安装mysql

2> 创建VS工程,配置工程头文件(mysql.h所在目录)和库文件(libmysql.lib所在目录)附加目录,指向mysql对应的目录

3> 将libmysql.dll动态库拷贝到工程根目录或Debug目录

4> 编写测试程序,验证C连接Mysql数据库

----------------------------------------------------------------------优雅的分割线------------------------------------------------------------------------------------

常见错误:

1、main.obj : error LNK2019: 无法解析的外部符号 mysql_init。。。。。


原因是没有在工程当中添加libmysql.lib配置,配置库文件目录


2、无法启动此程序,因为计算机中丢失libmyslq.dll。。。。


将libmysql.dll动态库拷贝到工程的根目录或Debug目录下。


3、未引入windows.h头文件,因为在windows连接mysql是通过socket方式与数据库进行通信的



4、main.obj : error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用.....

数据库位数与编译位数不一致,导致在链接时mysql的库函数找不到,比如:我的mysql是64位,提供的库当然是64位的,如果你在VS上用32位的平台去编译就会造成链接时出错。



修改编译平台,工程-->属性-->配置管理器-->在解决方案的工程列表中选择对应的项目,并将其修改成32位或64位,如果没有就新建一个。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值