使用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;
}
相关推荐
可观测性用观测云15 小时前
观测云数据转发和存档最佳实践
数据库
披着羊皮不是狼15 小时前
(7)为 RAG 系统接入 Redis Stack 实现向量持久化
数据库·redis·缓存
智者知已应修善业15 小时前
【51单片机4位数循环小数位移数值位移】2023-6-9
c++·经验分享·笔记·算法·51单片机
SelectDB15 小时前
基于 SelectDB 实现 Hive 数据湖统一分析:洋钱罐全球一体化探索分析平台升级实践
大数据·数据库·数据分析
飞yu流星15 小时前
mysql 基础
数据库·mysql·oracle
王璐WL15 小时前
【C++】string,vector和list对比
c++·list
零陵上将军_xdr15 小时前
MySQL 事务写入流程详解
android·数据库·mysql
不爱吃炸鸡柳16 小时前
算法复杂度从入门到精通:时间与空间复杂度全解析
开发语言·c++·算法
若阳安好16 小时前
【提效小工具】IN SQL、UPDATE SQL、INSERT SQL
java·数据库·sql
拳里剑气16 小时前
C++算法:二分查找
c++·算法·二分查找·学习方法