C语言连接数据库

文章目录

接下来我简单的介绍一下怎么用C语言连接数据库。

  1. 初始化数据库
  2. 创建数据库连接
  3. 执行增删改查语句
  4. 关闭数据库连接

一、初始化数据库

cpp 复制代码
// 数据库初始化
MYSQL mysql;
MYSQL* ret1 = mysql_init(&mysql);
if (ret1 == nullptr)
{
    std::cerr << "init_error" << std::endl;
    exit(-1);
}

/*****************
返回值:
	如果没有足够的内存来分配新对象,则为空。
*****************/

二、创建数据库连接

cpp 复制代码
// 数据库连接
MYSQL* ret2 = mysql_real_connect(&mysql, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0);
if (ret2 == nullptr)
{
    std::cerr << "connect_error" << std::endl;
    exit(-1);
}

/*****************
参数:
	1、MYSQL *mysql       ===> 创建的数据库变量
	2、const char *host   ===> 主机号, 如果是本地可以用"127.0.0.1"
	3、const char *user   ===> 用户名
	4、const char *passwd ===> 密码
	5、const char *db     ===> 数据库名
	6、unsigned int port  ===> 端口号
	7、剩下的两个参数一个置空,一个置0就行
返回值:
	如果没有足够的内存来分配新对象,则为空。
*****************/

三、执行增删改查语句

这个部分需要分成两类:增删改、查。增删改只需要考虑这个语句执行的是否是正常的,但是查询这个操作还需要通过返回值得到查询的结果。

1、增删改

cpp 复制代码
// 执行增删改
std::string sql = "insert into user (name, age) values ('wangwu', 19);";
int ret3 = mysql_query(&mysql, sql.c_str());
if (ret3)
{
	std::cerr << "query_error" << std::endl;
	exit(-1);
}

2、查

  1. 执行查询语句
  2. 得到结果集
  3. 得到结果集的行数和列数
  4. 遍历即可
cpp 复制代码
// 执行查找语句
std::string sql = "select * from  user;";
int ret4 = mysql_query(&mysql, sql.c_str());
if (ret4)
{
    std::cerr << "query_error" << std::endl;
    exit(-1);
}
// 得到结果集
MYSQL_RES* res = mysql_store_result(&mysql);

// 得到行数和列数
int row = mysql_num_rows(res);
int field = mysql_num_fields(res);

// 得到列名
MYSQL_FIELD* fields = mysql_fetch_fields(res);
for (int i = 0; i < row; i++)
{
    // 注意,不能直接打印,需要指定里面的name属性
    std::cout << fields[i].name << " ";
}
std::cout << "\n";

// 遍历得到结果集
MYSQL_ROW line;
for (int i = 0; i < row; i++)
{
    line = mysql_fetch_row(res);
    for (int j = 0; j < field; j++)
    {
        std::cout << line[j] << " ";
    }
    std::cout << "\n";
}

四、执行增删改查语句

cpp 复制代码
// 关闭数据库
mysql_close(&mysql);

cout << "\n";

}

复制代码
# 四、执行增删改查语句

[外链图片转存中...(img-9HkkinoN-1733452583128)]

```cpp
// 关闭数据库
mysql_close(&mysql);
相关推荐
zone_z13 分钟前
Oracle 数据库基础故障排查系列(12 篇)
数据库·oracle·dba·troubleshooting·blog-series
DBA_G16 分钟前
GBase 8a数据库RANGE分区操作详细解读
数据库·oracle
某不知名網友1 小时前
MySQL数据表详解|创建、查看、修改、删除实战教程
数据库·mysql
Wang's Blog1 小时前
PostgreSQL笔记20: 实例、集群、模板数据库与表空间 —— 逻辑体系架构深度解析
数据库·笔记·postgresql
wp123_19 小时前
硬件元器件笔记|IPX8 防水 Type‑C 母座安费诺 124018802112A 与 TONEVEE TY48086‑24A 分析
c语言·开发语言·笔记
杨运交9 小时前
[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比
数据库·redis·分布式
FungLeo10 小时前
Node 后端实战 · 列表查询到底怎么写?一个通用 DSL 封装,过滤分页排序一次搞定
数据库·node.js·serverless·dsl 封装·通用列表查询
游戏开发爱好者810 小时前
带签名时间戳接口的重放与压力测试实战,用动态值在发送前现算签名
网络协议·计算机网络·网络安全·ios·adb·https·压力测试
luj_176810 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
抓蛙师10 小时前
多租户 tenant_id SQL 注入漏洞分析与应急响应报告
数据库·sql