相关文章推荐
性感的毛衣  ·  用于Python3.4的Python MSS·  2 年前    · 
失落的饭卡  ·  javascript - Uncaught ...·  2 年前    · 
英姿勃勃的葡萄  ·  我有 7种 ...·  2 年前    · 

C语言代码连接MySQL数据库,附Windows和linux源码

Windows 环境:

一、前提准备:

  • MySQL 5.7 (64位)
  • Visual Studio 2019 (其他编译器也行,使用 64 位编译,与 MySQL 位数对应即可)

二、引入文件

C语言连接数据库比较繁琐,需要引入关于连接数据库的头文件,依赖等。

问题来了:这些文件都是哪里来的呢?我哪里可以找到这些头文件,依赖。请继续往下看:

找到当时安装MySql的位置:(我的MySQL安装路径:C:\Program Files\MySQL\MySQL Server 5.7) ,会看到如下目录:

所需要的头文件和依赖就在 include 和 lib 文件夹里,复制到与项目主文件同一级目录下即可 。

include 文件夹里全部要复制,不能只复制 mysql.h, 因为mysql.h 需要依赖其它头文件。lib 文件夹里复制 libmysql.dll 和 libmysql.lib 即可。

三、测试代码编写:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*引入连接Mysql的头文件和lib包*/
#include "mysql/mysql.h"
#pragma comment(lib,"libmysql")
/*定义一些数据库连接需要的宏*/
#define HOST "localhost" /*MySql服务器地址*/
#define USERNAME "root" /*用户名*/
#define PASSWORD "123456" /*数据库连接密码*/
#define DATABASE "rank" /*需要连接的数据库*/
// 执行sql语句的函数
void exeSql(char* sql) {
    MYSQL my_connection; /*数据库连接*/ 
    int res;  /*执行sql语句后的返回标志*/ 
    MYSQL_RES* res_ptr; /*执行结果*/ 
    MYSQL_ROW result_row; /*按行返回查询信息*/ 
    int row, column; /* 定义行数,列数*/
    mysql_init(&my_connection);
    if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {
        printf("数据库连接成功!");
        /*设置查询编码为 utf8, 支持中文*/
        mysql_query(&my_connection, "set names utf8");
        res = mysql_query(&my_connection, sql);      
        if (res) {
            /*现在就代表执行失败了*/
            printf("Error:mysql_query !\n");
            /*不要忘了关闭连接*/
            mysql_close(&my_connection);
        } else {
            /*现在就代表执行成功了*/
            /*mysql_affected_rows会返回执行sql后影响的行数*/
            printf("%d 行受到影响!\n", mysql_affected_rows(&my_connection));
            // 把查询结果装入 res_ptr
            res_ptr = mysql_store_result(&my_connection);
            // 存在则输出
            if (res_ptr) {
                // 获取行数,列数
                row = mysql_num_rows(res_ptr);
                column = mysql_num_fields(res_ptr);
                // 执行输出结果,从第二行开始循环(第一行是字段名)
                for (int i = 1; i < row + 1; i++) {
                    // 一行数据
                    result_row = mysql_fetch_row(res_ptr);
                    for (int j = 0; j < column; j++) {
                     printf("%s", result_row[j]);
            /*不要忘了关闭连接*/
            mysql_close(&my_connection);
    } else {
        printf("数据库连接失败!");

Linux 环境:

一、前提准备:

  • MySql 5.7(64位)
  • c/c++环境(gcc)编译环境
    启动 Mysql 服务: sudo service start mysql

二、测试代码编写:

「注意:」

  • 如果 mysql找不到mysql.h, 可以安装 apt-get install libmysqlclient-dev ,安装完之后,重新进入mysql目录下就有相应的头文件了。
  • Linux 引入mysql.h 就不要像 windows 环境下一样, 直接放在和主文件同一级目录下,而是找到 mysql.h 的位置:/usr/include/mysql/
  • QQ搜索:725022484,获取200G编程资料。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/*引入连接Mysql的头文件*/
#include "/usr/include/mysql/mysql.h"
/*定义一些数据库连接需要的宏*/
#define HOST "localhost" /*MySql服务器地址*/
#define USERNAME "root" /*用户名*/
#define PASSWORD "123456" /*数据库连接密码*/
#define DATABASE "rank" /*需要连接的数据库*/
// 执行sql语句的函数
void exeSql(char* sql) {
    MYSQL my_connection; /*数据库连接*/ 
    int res;  /*执行sql语句后的返回标志*/ 
    MYSQL_RES* res_ptr; /*执行结果*/ 
    MYSQL_ROW result_row; /*按行返回查询信息*/ 
    int row, column; /* 定义行数,列数*/
    mysql_init(&my_connection);
    if (mysql_real_connect(&my_connection, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, CLIENT_FOUND_ROWS)) {
        printf("数据库连接成功!");
        /*设置查询编码为 utf8, 支持中文*/
        mysql_query(&my_connection, "set names utf8");
        res = mysql_query(&my_connection, sql);      
        if (res) {
            /*现在就代表执行失败了*/
            printf("Error:mysql_query !\n");
            /*不要忘了关闭连接*/
            mysql_close(&my_connection);
        } else {
            /*现在就代表执行成功了*/
            /*mysql_affected_rows会返回执行sql后影响的行数*/
            printf("%d 行受到影响!\n", mysql_affected_rows(&my_connection));
            // 把查询结果装入 res_ptr
            res_ptr = mysql_store_result(&my_connection);
            // 存在则输出
            if (res_ptr) {
                // 获取行数,列数
                row = mysql_num_rows(res_ptr);
                column = mysql_num_fields(res_ptr);
                // 执行输出结果,从第二行开始循环(第一行是字段名)
                for (int i = 1; i < row + 1; i++) {
                    // 一行数据
                    result_row = mysql_fetch_row(res_ptr);
                    for (int j = 0; j < column; j++) {
                     printf("%s", result_row[j]);
            /*不要忘了关闭连接*/