下面我将介绍当需要用C语言开发能访问MySQL数据库的程序时成功配置的关键事项。

操作系统:Windows 7 x64

编程环境:Code::Blocks 10.05(32bit)

配置方式说明:用C语言开发访问MySQL数据库至少有3种配置方式。

方式1:使用MySQL Connector/C二进制发行版,在运行C语言开发环境的机器中只用MySQL Connector/C,不安装MySQL Server。这种方式的适用场合是:本机不需要安装庞大的MySQL Server程序,我们的C语言程序访问的数据库服务器程序在远程的某个主机上(通过网络能访问到它),数据库服务器程序不在本机。这种是轻量级方式。此时MySQL Connector/C 提供了头文件mysql.h,静态链接库mysqlclient.lib,动态链接库libmysql.dll。此外还提供了当需要动态链接库时的静态导入库libmysql.lib。

方式2:使用MySQL Connector/C二进制发行版,在运行C语言开发环境的机器中不装MySQL Connector/C,但安装了MySQL Server。这种方式的使用场合是:需要访问的目标数据库就在本机,因此本机安装了MySQL Server。这种方式的Code::Blocks环境配置与方式1相同,只是mysql.h所在的include目录以及libmysql.lib,libmysql.dll所在的lib目录的路径在MySQL Server的安装目录下。

以上两种方式中,如果是你使用的是MySQL Connector/C Community版,则需要预先安装Microsoft Visual C++ Redistributable forVisual Studio 2015,至于是安装x64版还是x86版,需要看你计算机的配置情况而定。

方式3:使用MySQL Connector/C的源代码。将此源代码与你的C程序源代码一起编译。这种方式过程比较繁琐,具体可参考MySQL官网相关文档:https://dev.mysql.com/doc/connector-c/en/connector-c-installation-source.html

本文介绍的安装方式为方式1。

关键步骤和注意事项:

(1)在MySQL官网上下载MySQL Connector/C的二进制发行版的zip包。请注意版本为win32版,不要下载winx64版。建议不下载msi包,因为该包是自动解压的Program File或Program File(x86)目录的MySQL目录下,还不如自己解压到指定目录。

(2)将以上下载的mysql-connector-c-*.*.*-win32.zip压缩包解压到指定的文件夹。本例中解压在“C:\MySQL Connector C 6.1 for Win X32”目录下。

(3)新建Code::Blocks项目。

(4)配置编译时头文件mysql.h所在位置,配置链接时所需的libmysql.lib,libmysql.dll所在位置。单击Code::Blocks菜单“Project”-->"Build Options..."。弹出如下窗口。请选择左边框中的"Debug",这表示本项目的“Debug”配置。

然后,设置需要连接的库文件所在位置。选择“Linker Settings”选项卡,单击“Add”按钮,选择刚才解压的MySQL Connectors/C压缩包解压后目录中的lib目录下的libmysql.lib。单击“确定”后,如下图所示。

如果这一步没有配置后,在编译时,将提示无法解析程序中的MySQL API函数。

然后,设置include目录和lib目录作为搜索路径。首先,单击“Search directories”选显卡的“Compiler”子选项卡,单击“Add”将MySQ  Connector/C解压目录下的include 目录添进来。这是mysql.h头文件所在位置。

如果程序运行时出现编译时找不到MySQL API中的函数的错误,那一定是此步骤的mysql.h头文件所在的include 目录的位置没有配置好。

接下来,请单击“Search directories”选显卡的“Linker”子选项卡,单击“Add”将MySQ  Connector/C解压目录下的lib 目录添进来。这是libmysql.dll动态链接库文件所在位置。虽然静态链接库文件libmysql.lib也在此文件,但是这个静态链接库在“Linker Settings”中已经进行了设置。

如果程序的编译通过了,但是运行时出现如下错误,那么一定是因为此步骤中libmysql.dll的搜索位置没有设置好。

请用如下代码测试:

#include <stdio.h>
#include <winsock2.h> //因为要进行网络连接
#include <mysql.h> //因为使用了MySQL C API访问mysql数据库

int main() {
    MYSQL mysql; //mysql数据库连接
    mysql_init(&mysql);//初始化mysql连接

char host[]="192.168.0.123";//MYSQL服务器的主机名或IP,本机为localhost
    char user[]="user";//mysql数据库登录的用户名
    char passwd[]="123456";//mysql数据库登录的密码
    char db[]="mydatabase";//要连接的数据库名
    unsigned int port=3306;//MySQL服务器的TCP/IP端口号,默认为3306
    char *unixSocket=NULL;//连接类型
    unsigned int clientFlag=CLIENT_FOUND_ROWS;//MySQL运行ODBC数据库的标记

MYSQL_RES *res_ptr; //指向查询结果的指针
    MYSQL_FIELD *field; //指向字段结构体的指针
    MYSQL_ROW result_row; //按行返回的select结果,即一行记录。
    int rowCnt, colCnt; //select结果返回的记录行数和列数
    int res; //执行sql语句后的返回标志
    int i, j;

//建立mysql连接
    if (NULL != mysql_real_connect(&mysql,
                                   host,
                                   user,
                                   passwd,
                                   db,
                                   port,
                                   unixSocket,
                                   clientFlag)) {
        //连接成功
        printf("数据库连接成功!\n");

//设置查询编码为gbk,以支持中文
        mysql_query(&mysql, "set names gbk");

char *sql;
        sql="select * from users"; //请改为对自己数据的表进行查询的SQL语句。
        res = mysql_query(&mysql, sql);
        if (res) { //执行查询语句失败
            printf("查询语句执行失败 !\n");
            //关闭连接
            mysql_close(&mysql);
        } else { //查询语句执行成功
            //将查询的结果赋值给res_ptr
            res_ptr = mysql_store_result(&mysql);
            //如果记录集不为空,就把每条记录按行输出
            if (res_ptr) {
                //取得结果记录集的行数和字段数
                rowCnt = mysql_num_rows(res_ptr);
                colCnt = mysql_num_fields(res_ptr);
                printf("查询到 %d 行 \n", rowCnt);
                //输出记录的字段名
                for (i = 0; field = mysql_fetch_field(res_ptr); i++)
                    printf("%10s ", field->name);
                printf("\n");
                //按行输出每条记录
                for (i = 1; i < rowCnt+1; i++) {
                    result_row = mysql_fetch_row(res_ptr);
                    for (j = 0; j < colCnt; j++)
                        printf("%10s ", result_row[j]);
                    printf("\n");
                }
            }
            //最后,不再使用数据库时,请不要忘了关闭连接,释放资源。
            mysql_close(&mysql);
        }
    } else {
        printf("数据库连接失败!");
    }
    return 0;
}

有两个层面上的测试。

第一层测试,Code::Blocks是否能正常编译使用MySQL Connector/C API的代码。

第二层测试:数据库是否能被程序代码正常访问。

如果以上代码能够正常运行,那就恭喜你,配置和链接成功了。

如果程序编译通过了,但是在运行时出现如下错误,

那么极有可能是MySQL API与所需的VC++2015Resdistribute 的版本不匹配。

经过验证,正确的匹配模式是:

32的gcc编译器

MySQL Connector/C32位的x86版

VC++2015Resdistribute32位的x86版

以上组合就没有问题。其他组合,可能有问题。

如下出现编译时找不到MySQL API中的函数的错误,那一定是mysql.h头文件的位置没有配置好。

Windows环境下Code::Blocks中成功配置MySQL Connector/C连接MySQL数据库相关推荐

  1. 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信

    http://blog.csdn.net/whuancai/article/details/11994341 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通 ...

  2. windows环境下利用python进行CGI配置

    windows环境下利用python进行CGI配置(win10,visual stdio 2017中的python3.6) 写在前面,初学python,看到python的CGI编程这一章的时候尝试在教 ...

  3. windows环境下apache VC14+php境配置

    windows环境下apache VC14+php环境配置 版本选择:apache 2.4.41 VC14+php7.1.33 X64 一.安装Apache 1.登录 http://httpd.apa ...

  4. windows环境下php安装composer和配置php全局变量

    今天在云服务器上办公,重新搭建的服务环境,做laravel压缩文件并下载需要引用插件zipper扩展,是新环境没有composer,需要安装,在同事电脑按下面顺序安装成功. 第一步.下载安装器 php ...

  5. hadoop-0.21.0 在Windows环境下的部署(2)Hadoop配置

    1:下载 本来想传到csdn上的,但是最大只支持70M的文件,还是网上找吧 2:解压在C:\cygwin\hadoop 3:配置 hadoop/conf下需要配置的文件: 1.hadoop-env.s ...

  6. Windows 环境下 git 客户端中的 git-bash 和 MINGW64

    我们在 Windows10 操作系统下,安装了 git 客户端之后,可以通过 git-bash.exe 打开一个 shell: 执行一些 linux 系统里的命令: 注意到上图紫色的 MINGW64. ...

  7. 【开发工具】Windows环境下 IDEA 开发工具安装配置(无错完整)

    目录 一.开发工具下载: 二.IDE统一管理工具: 三.IDEA配置: 设置主题: 设置代码颜色: 设置编译字符编码(全部设置为UTF-8): 开启模糊匹配: 设置背景壁纸: 自动导包移包: 方法分割 ...

  8. 在Windows环境下Webots与Ros的联合仿真

    系统环境:Win11专业版 21H2   WSL2+Ubuntu18.04+ROS melodic 软件版本:WebotsR2020a rev1 前言 工作原因需要在Windows环境下进行开发,而代 ...

  9. 本机php环境搭建教程:windows环境下wampserver的配置教程——超级详细

    转载自:http://youchunyan5.blog.163.com/blog/static/5896062020123474456352/ 本机php环境搭建教程:windows环境下wampse ...

最新文章

  1. docker swarm英文文档学习-8-在集群中部署服务
  2. 中国半导体最强助攻来了!十年免税、上下游一揽子扶持,明确「集成电路」为一级学科...
  3. Solr4.7实现LBS(地理位置搜索)
  4. 美国华尔街拥抱区块链是最大的威胁
  5. 浅谈 Windows API 编程
  6. vue中获取输入框中得到值_如何获取vue input的值
  7. 字符串的unicode java_Java把字符串转Unicode
  8. 头条号个人中心登录_注册登录系统
  9. redis java jar_Redis在java开发中使用
  10. 文件被别的程序打开无法删除怎么办?
  11. 驱动天文科普_云计算成“仰望星空”的桥梁
  12. IAR中eww、ewp、ewd···等各文件的含义和用途
  13. Bokeh可视化图表使用教程
  14. 【Linux网络服务】Centos7搭建yum服务器
  15. 2019武汉理工计算机考研复试题(回忆)
  16. 用html制作发帖与回帖,发帖代码
  17. php ctr b,用PHP解密AES CTR Little Endian
  18. 客户端socket通信库
  19. 为什么电源中经常用肖特基二极管
  20. 最强PostMan使用教程(6)- 使用Postman导入swagger OPEN API

热门文章

  1. 使用EasyNetQ组件操作RabbitMQ消息队列服务
  2. 下载和安装R、RStudio !
  3. 【Swift学习】Swift编程之旅---ARC(二十)
  4. surfaceView中的线程问题
  5. C# 制作Com组件:java调用.net DLL的方法
  6. 南京:第三届软博会“外包”将唱主角
  7. 系统的Drawable(四)-LayerListDrawable
  8. 紫书 例题8-10 UVa 714 (二分答案)
  9. Java默认类型,类型转换,常量与变量笔记
  10. 谈谈Java基础数据类型