@bit::Shadow
✧(≖ ◡ ≖✿
目录
[初始化 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;
}

感谢支持,长期连载
欢迎关注
