使用C语言连接MySQL

1.准备工作

1.1 安装mysql

在centos7中安装mysql8.0

1.保证mysql服务有效

bash 复制代码
sudo yum install -y mysql-community-server

2.下载合适自己平台的mysql connect库

bash 复制代码
sudo yum install -y mysql-community-devel

1.2 配置编译配置

包含头文件 和链接

头文件在系统中,不需显示包含。

Makefile:

2.MySQL接口使用

官方文档:MySQL :: MySQL 8.4 C API Developer Guide :: 4 C API Function Reference

2.0 查询版本

cpp 复制代码
const char * mysql_get_client_info(void)

2.1 初始化MYSQL对象

cpp 复制代码
MYSQL * mysql_init(MYSQL *mysql)

2.2 连接数据库

cpp 复制代码
MYSQL * mysql_real_connect(MYSQL *mysql,
                    const char *host,
                    const char *user,
                    const char *passwd,
                    const char *db,
                    unsigned int port,
                    const char *unix_socket,
                    unsigned long client_flag)

2.3 设置编码方式

cpp 复制代码
int mysql_set_character_set(MYSQL *mysql, const char *csname)

2.4 执行SQL语句

cpp 复制代码
int mysql_query(MYSQL *mysql, const char *stmt_str)

2.5 获取查询结果

cpp 复制代码
MYSQL_RES * mysql_store_result(MYSQL *mysql)

1.获取结果行数

cpp 复制代码
uint64_t mysql_num_rows(MYSQL_RES *result)

2.获取结果列数

cpp 复制代码
unsigned int mysql_num_fields(MYSQL_RES *result)

3.获取结果列名

cpp 复制代码
MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result)

4.获取结果内容

cpp 复制代码
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)

2.6 关闭连接

cpp 复制代码
void mysql_close(MYSQL *mysql)

2.7 *事务相关

cpp 复制代码
bool mysql_autocommit(MYSQL *mysql, bool mode)
bool mysql_commit(MYSQL *mysql)
bool mysql_rollback(MYSQL *mysql)

3 案例

cpp 复制代码
#include <iostream>
#include <mysql/mysql.h>

const std::string host = "localhost";
const std::string user = "lmx";
const std::string password = "0506";
const std::string db = "conn";
const unsigned int port = 3306;

int main()
{
    //查看版本号
    std::cout << "mysql client Version:" << mysql_get_client_info() << std::endl;
    //初始化MYSQL对象
    MYSQL *mysql = mysql_init(nullptr);
    if (mysql == nullptr)
    {
        std::cerr << "init MySQL error" << std::endl;
        return 1;
    }
    //建立连接
    if (mysql_real_connect(mysql, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
    {
        std::cout << "connect MySQL error" << std::endl;
        return 2;
    }
    //设置编码方式
    if(mysql_set_character_set(mysql, "utf8") != 0)
    {
        std::cout << "set character error" << std::endl;
        return 3;
    }

    // const std::string sql = "insert into user (name, age, telphone) values('阿哒', 25, '14455')";
    // const std::string sql = "update user set age = 18 where id = 1";
    // const std::string sql = "delete from user where id = 3";
    // const std::string sql = "select * from user";

    while (true)
    {
        std::string sql;
        std::cout << "MySQL<< ";
        if (!(std::getline(std::cin, sql)) || sql == "quit")
        {
            std::cout << "byebye" << std::endl;
            break;
        }
        //执行查询
        if (mysql_query(mysql, sql.c_str()) == 0)
        {
            std::cout << "success" << std::endl;
        }
        else
        {
            std::cerr << "failed" << std::endl;
            return 4;
        }
        //捕获结果
        if (sql.find("select") != std::string::npos)
        {
            MYSQL_RES *result = mysql_store_result(mysql);
            if(result == nullptr)
            {
                std::cerr << "store result error" << std::endl;
                return 5;
            }
            //行数
            uint64_t rows = mysql_num_rows(result);
            //列数
            unsigned int fields = mysql_num_fields(result);
            //列属性[array]
            MYSQL_FIELD *field = mysql_fetch_field(result);
            // 属性
            for (int i = 0; i < fields; i++)
            {
                std::cout << field[i].name << "\t";
            }
            std::cout << std::endl;
            // 内容
            for (int i = 0; i < rows; i++)
            {
                //行内容
                MYSQL_ROW row = mysql_fetch_row(result);
                for (int j = 0; j < fields; j++)
                {
                    std::cout << row[j] << "\t";
                }
                std::cout << std::endl;
            }
        }
    }
    mysql_close(mysql);
    return 0;
}
相关推荐
Queenie_Charlie6 小时前
stars(树状数组)
数据结构·c++·树状数组
静听山水6 小时前
StarRocks表模型详解
数据库
会周易的程序员6 小时前
openplc runtimev4 Docker 部署
运维·c++·物联网·docker·容器·软件工程·iot
静听山水6 小时前
Redis核心数据结构-Set
数据结构·数据库·redis
墨理学AI6 小时前
一文学会一点python数据分析-小白原地进阶(mysql 安装 - mysql - python 数据分析 - 学习阶段梳理)
python·mysql·数据分析
爱装代码的小瓶子6 小时前
【C++与Linux基础】进程间通讯方式:匿名管道
android·c++·后端
CoderCodingNo6 小时前
【GESP】C++ 二级真题解析,[2025年12月]第一题环保能量球
开发语言·c++·算法
数研小生6 小时前
亚马逊商品列表API详解
前端·数据库·python·pandas
洛豳枭薰6 小时前
MySQL 并行复制
数据库·mysql
LYOBOYI1236 小时前
qtcpSocket详解
c++·qt