MySQL C/C++链接MySQL使用

@bit::Shadow
✧(≖ ◡ ≖✿

目录

MySQL链接

[初始化 MYSQL*](#初始化 MYSQL*)

链接

MySQL表操作

增删改

☆查


本文介绍了MySQL C API的基本使用流程:通过mysql_init初始化连接,mysql_real_connect建立数据库连接;使用mysql_query执行增删改查操作;查询时用mysql_store_result获取结果集,mysql_fetch_row逐行读取数据,mysql_fetch_fields获取字段信息,实现对表数据的完整操作。代码示例清晰,适合初学者学习。

MySQL链接

初始化 MYSQL*

cpp 复制代码
MYSQL *mysql_init(MYSQL *mysql);
cpp 复制代码
MYSQL *my = mysql_init (nullptr);
if(nullptr==my)
{
    fprintf(stderr, "连接失败: %s\n", mysql_error(my));
    return 1;
}

mysql_init(NULL) 里的 NULL 是传给 mysql_init() 的参数,表示由 MySQL 库自己分配 MYSQL 结构体内存,而不是复用你传入的已有内存。

链接

cpp 复制代码
MYSQL *mysql_real_connect(
    MYSQL        *mysql,       // 结构体
    const char   *host,        // 主机名/IP
    const char   *user,        // 用户名
    const char   *passwd,      // 用户密码
    const char   *db,          // 连接的数据库
    unsigned int  port,        // MySQL 端口号,如 8080
    const char   *unix_socket, // nullptr
    unsigned long client_flag  // 0
);
cpp 复制代码
// 链接mysql
if(nullptr==mysql_real_connect (my, host, user, password, db, sqlPort, nullptr,0))
{
    fprintf(stderr, "连接失败: %s\n", mysql_error(my));
    return 2;
}

MySQL表操作

query:询问

cpp 复制代码
int mysql_query(MYSQL *mysql, const char *query);
cpp 复制代码
int n = mysql_query (my, "insert stu(name) values('张三')");
if(n != 0)
{
    fprintf (stderr, "query failed:%s\n", mysql_error (my));
    return 3;
}

增删改

在query参数直接输入即可

cpp 复制代码
//增删改
const char *inser = "insert stu(name) values('张三')";
// delete from 表名 定位条件(一定要跟定位条件否则删除整张表)
const char *del = "delete from stu where name='Jack'";
// update 表名 set 列名=新值 定位条件
const char *up = "update stu set name='李四' where name='张三'";//不要把表名stu忘了

int n = mysql_query (my, sqlcomd);
if(n != 0)
{
    fprintf (stderr, "query failed:%s\n", mysql_error (my));
    return 3;
}

☆查

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

返回的res是:获取query中select存储到MYSQL*结构体中的信息。

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

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result);

mysql_fetch_row

行访问使用"游标",每次调用在传入的result参数内记录调用情况相当于迭代器,因此需要在循环体内部。

mysql_fetch_fields

这是列的一次性全部返回。我们常使用mysql_fetch_fields来获取列名、列类型、能不能为null等信息。

cpp 复制代码
// 查
const char *sel = "select* from stu";
int n = mysql_query (my, sel);
if(n != 0)
{
    fprintf (stderr, "query failed:%s\n", mysql_error (my));
    return 3;
}

// 获取query中select存储到MYSQL*结构体中的信息mysql_store_result
MYSQL_RES *res = mysql_store_result (my);
if(res == nullptr)
{
    fprintf (stderr, "mysql_store_result failed:%s\n", mysql_error (my));
    return 4;
}

int rows = mysql_num_rows (res);
int fields = mysql_num_fields (res);

//内容
// MYSQL_FIELD* field = mysql_fetch_field (res); 
// 一次返回一个与列一致
// 头行列名打印
MYSQL_FIELD *field = mysql_fetch_fields (res); //一次性全部返回
for (int i = 0; i < fields;i++)
{
    cout << field[i].name << "\t";
}
cout << endl;
// 剩余行内容
for (int i = 0; i < rows;i++)
{
    MYSQL_ROW row = mysql_fetch_row (res);
    for (int j = 0; j < fields;j++)
    {
        cout << row[j] << "\t";
    }
    cout << endl;
}



感谢支持,长期连载

欢迎关注

相关推荐
FYKJ_20101 小时前
springboot手工蜀绣在线销售系统60947-计算机课程设计、毕业设计
java·spring boot·后端·python·mysql·spark·课程设计
Mortalbreeze1 小时前
MySQL 基础篇(五):数据操作基础 —— CRUD
linux·服务器·数据库·mysql
Shadow(⊙o⊙)1 小时前
mysql为创建普通用户并创建库赋权
数据库·sql·mysql
Q26433650231 小时前
【有源码】基于springboot的知识产权管理系统-知识产权咨询问答管理系统-知识产权价值评估管理系统
java·spring boot·mysql·spring·毕业设计·javaweb·课程设计
Studying 开龙wu1 小时前
CVAT 导出崩溃排查实录:一个空壳轨迹引发的连锁反应
数据库·sqlite
PaperData9 小时前
1985-2025年全国区县专利申请与授权面板数据
数据库
snpgroupcn9 小时前
大数据量SAP迁移方案:系统越大,越不能硬搬
数据库·sap
Flynt10 小时前
Redis Cluster主节点挂了,为什么"高可用"还全员掉线?我把三次kill的记录翻出来了
数据库·redis·分布式
笃行35010 小时前
KingbaseES 数据加密全解:从 SSL 到全密态
数据库