使用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;
}
相关推荐
Elastic 中国社区官方博客2 小时前
使用 LocalAI 和 Elasticsearch 构建本地 RAG 应用
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
倔强的石头_2 小时前
【金仓数据库】ksql 指南(五) —— 创建与管理索引和视图(KingbaseES 查询优化核心)
数据库
粤M温同学2 小时前
Android Room数据库的基本使用
android·数据库
cypking2 小时前
三、NestJS 开发实战文档-->集成 MySQL(TypeORM)
前端·数据库·mysql·adb·node.js
雾岛听蓝2 小时前
C++ string 类解析
开发语言·c++
子枫秋月2 小时前
模拟C++string实现
数据结构·c++·算法
码农水水2 小时前
大疆Java面试被问:Spring事务的传播行为详解
java·数据库·spring
oioihoii2 小时前
C++内存安全方案前沿研究
c++·安全·mfc
十五年专注C++开发2 小时前
QProcess在Windows下不能正常启动exe的原因分析
开发语言·c++·windows·qprocess·createprocess