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;
}



感谢支持,长期连载

欢迎关注

相关推荐
泡海椒16 分钟前
JQuick-SQL JQuickTable 模型:XML 动态 SQL 的表封装边界
xml·数据库·sql
ss2731 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 28 PostgreSQL MVCC机制介绍
数据库·笔记·postgresql
奇牙coding2 小时前
doubao-seed-2.1-pro 报 HTTP 401 怎么办?Key 正确也要检查请求头和端点
网络·数据库·http·ai
geovindu9 小时前
sql:SQL Pagination and Limiting Results using PorstgreSQL 18.0
大数据·数据仓库·sql·postgresql·数据库开发·数据库架构·1024程序员节
不脱发的程序猿10 小时前
纳指ETF量化策略
数据库·人工智能·1024程序员节
程序员塔塔喵11 小时前
【MySQL篇|第一篇】索引失效的情况
数据库·mysql·索引失效
paopaokaka_luck11 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
北京青蓝智慧马老师11 小时前
比外部黑客更难防的,是那个有权限的自己人(3 个脱敏复盘)
大数据·数据库·人工智能
笃行35011 小时前
拆一台数据集成产品:KFS 的骨架、肌肉和神经
数据库
4SAPI11 小时前
搭建 AI 数据分析工具大模型 API 选型指南
数据库·人工智能·架构·php·1024程序员节