MySQL 如何用C语言连接
✨✨✨励志成为超级技术宅 ✨✨✨
本文主要讲解在Linux服务器上,如何使用c语言MySQL库的接口来对MySQL数据库进行操作,如果没有服务器安装MySQL,也可以先学学看怎么用c语言mysql库的接口,还是比较容易的了。(●☌◡☌●)。那么开始讲解吧!
一.部分接口讲解
我们先来看接口的定义,这部分比较无聊,我们也可以先看第二部分的代码使用 ,再返回来看看。
1.MYSQL *mysql_init(MYSQL *mysql)
作用:对数据库进行初始化,要使用库,必须先进行初始化
参数:MYSQL *mysql
:这是一个指向 MYSQL
结构体的指针。如果传入 NULL
,mysql_init
会分配一个新的 MYSQL
结构体并返回其指针。如果传入一个非 NULL
的指针,mysql_init
会初始化这个已经存在的 MYSQL
结构体。我们一般都是直接传入NULL,如 MYSQL * mysql=mysql_init(nullptr);这样使用就行。
返回值:
- 成功时,
mysql_init
返回一个指向MYSQL
结构体的指针。这个指针可以用于后续的数据库连接操作。 - 失败时,返回
NULL
。这通常发生在内存分配失败的情况下。
2.MYSQL *mysql_real_connect()
完整接口:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag),参数非常复杂我们一个个讲解。
作用:连接mysql服务器。
参数:
MYSQL *mysql
:这是一个已经通过mysql_init
初始化的MYSQL
连接句柄。const char *host
:MySQL 服务器的主机名或 IP 地址。可以是NULL
或"localhost"
,表示连接到本地服务器。const char *user
:用于连接数据库的用户名。const char *passwd
:对应用户的密码。const char *db
:要连接的数据库名,也可以置为空,后面调用其他接口选择。unsigned int port
:MySQL 服务器的端口号。如果设置为0
,则使用默认端口(通常是3306
)。const char *unix_socket
:UNIX 套接字文件的路径,我们通常设置为 NUll,使用默认的 UNIX 套接字文件路径。unsigned long client_flag
:客户端标志,用于指定连接选项。可以是多个标志的按位或组合,比如CLIENT_INTERACTIVE
、CLIENT_FOUND_ROWS
等,我们通常置为0就行。
返回值:
- 成功时,
mysql_real_connect
返回一个指向MYSQL
结构体的指针(与传入的mysql
参数相同)。这个指针表示一个成功的数据库连接,可以用于后续的数据库操作。 - 失败时,返回
NULL
。此时,可以通过调用mysql_error
函数来获取关于连接失败的更多信息。
3. int mysql_set_character_set(MYSQL *mysql, const char *csname)
作用:设置数据库字符集
参数:1.初始化的 MYSQL
连接句柄,2要设计的字符集名称
返回值:
- 成功时,
mysql_set_character_set
返回0
。 - 失败时,返回非零值。此时,可以通过调用
mysql_error
函数来获取关于设置字符集失败的更多信息。
4.int mysql_query(MYSQL *mysql, const char *q)
作用:执行sql语句
参数:1.初始化的 MYSQL
连接句柄,2要执行的sql语句
返回值:
- 成功时, 返回
0
。 - 失败时,返回非零值。此时,可以通过调用
mysql_error
函数来获取关于设置字符集失败的更多信息。
5.void mysql_close(MYSQL*mysql)
作用:关闭连接,释放句柄
参数:初始化的 MYSQL
连接句柄
二.代码使用
首先我们先登入MySQL客户端查看并选择我们需要连接的数据库
这里我们选择gobang数据库进行连接。
我们直接看代码来学学看怎么使用:
#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>
#include<iostream>
#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASS "147258Ll!"
#define DBNAME "gobang"
int main()
{
//1. 初始化mysql句柄
// MYSQL *mysql_init(MYSQL *mysql);
MYSQL * mysql=mysql_init(nullptr);
//2. 连接服务器
// MYSQL *mysql_real_connect(mysql, host, user, pass, dbname, port, unix_socket, flag);
mysql_real_connect(mysql,HOST,USER,PASS,DBNAME,PORT,nullptr,0);
//3. 设置客户端字符集
// int mysql_set_character_set(mysql, "utf8");
int ret=mysql_set_character_set(mysql,"utf8");
//4. 选择要操作的数据库
//之前选择了数据库这里可以不写
// int mysql_select_db(mysql, dbname)
//mysql_select_db(mysql, DBNAME);
//5. 执行sql语句
// int mysql_query(MYSQL *mysql, char *sql);
const char *sql = "insert stu values(100,'xixi','17');";
mysql_query(mysql,sql);
//6.关闭连接,释放句柄
mysql_close(mysql);
return 0;
}
这里我们通过c语言接口连接gobang数据库,并向stu表插入一条数据(100,xixi,17)。
我们先来看看表结构:
表中有三个属性id,name,age,运行上面的代码我们来看看结果 。
可以看到插入成功。但是这里我们执行的SQL语句并不需要结果数据,如果是select语句需要返回结果集,我们要看到对应的结果那么应该如何使用?这里我们还要学学其他接口
三.与结果集有关的其他接口
1.MYSQL_RES *mysql_store_result(MYSQL *mysql)
作用:讲sql语句执行的保存结果到本地
参数:mysql句柄
返回值:指向结果集的指针,失败为空
2.int mysql_num_rows(MYSQL_RES *res)和int mysql_num_fields(res);
作用:获取结果集的行数和列数
参数:结果集指针
返回值:行数和列数
3.MYSQL_ROW mysql_fetch_row(MYSQL_RES*res)
作用:按行遍历结果集
参数:结果集指针
返回值:MYSQL_ROW ,本质是二级指针char* *,指向一行结果集的一条记录,访问过后会自动移向下一条记录。
我们在使用过程会通常会讲上面的接口一起结合起来遍历结果集。
四.代码使用
我们再来看看包含所有接口的代码:
#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>
#include<iostream>
#define HOST "127.0.0.1"
#define PORT 3306
#define USER "root"
#define PASS "147258Ll!"
#define DBNAME "gobang"
int main()
{
//1. 初始化mysql句柄
// MYSQL *mysql_init(MYSQL *mysql);
MYSQL * mysql=mysql_init(nullptr);
//2. 连接服务器
// MYSQL *mysql_real_connect(mysql, host, user, pass, dbname, port, unix_socket, flag);
mysql_real_connect(mysql,HOST,USER,PASS,DBNAME,PORT,nullptr,0);
//3. 设置客户端字符集
// int mysql_set_character_set(mysql, "utf8");
int ret=mysql_set_character_set(mysql,"utf8");
//4. 选择要操作的数据库
// int mysql_select_db(mysql, dbname)
mysql_select_db(mysql, DBNAME);
//5. 执行sql语句
// int mysql_query(MYSQL *mysql, char *sql);
const char *sql = "insert stu values(100,'xixi','17');";
mysql_query(mysql,sql);
const char*sql2="select *from stu;";
mysql_query(mysql,sql2);
//6. 如果sql语句是查询语句,则需要保存结果到本地
// MYSQL_RES *mysql_store_result(MYSQL *mysql)
MYSQL_RES *res=mysql_store_result(mysql);
//7. 获取结果集中的结果条数
// int mysql_num_rows(MYSQL_RES *res);
// int mysql_num_fields(MYSQL_RES *res);
int rows_num=mysql_num_rows(res);
int cols_num=mysql_num_fields(res);
//8. 遍历保存到本地的结果集
for(int i=0;i<rows_num;i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
for(int j=0;j<cols_num;j++)
{
std::cout<<row[j]<<std::endl;
}
}
//9. 释放结果集
mysql_free_result(res);
//10. 关闭连接,释放句柄
mysql_close(mysql);
return 0;
}
运行结果:
用c语言连接数据库就讲解到这了,我们只要按流程依此使用相关接口就行了,还是挺简单的吧,感觉有帮助还请点个赞了,这真的很重要!(๑•́ ₃ •̀๑)/