bit::Shadow(⊙o⊙)头像
关注
MySQL C/C++链接MySQL使用封面图

MySQL C/C++链接MySQL使用

@bit::Shadow
✧(≖ ◡ ≖✿ 

目录

MySQL链接

初始化 MYSQL*

链接

MySQL表操作

增删改

☆查


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

MySQL链接

初始化 MYSQL*

MYSQL *mysql_init(MYSQL *mysql);
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 结构体内存,而不是复用你传入的已有内存。

链接

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
);
// 链接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:询问

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

增删改

在query参数直接输入即可

//增删改
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;
}

☆查

MYSQL_RES *mysql_store_result(MYSQL *mysql);

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

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等信息。

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




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

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/oooooooooooohd/article/details/166990422

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--