主要使用的是mysql开发包中的api接口
操作流程
1.初始化mysql操作句柄
MYSQL *mysql_init(MYSQL *mysql);
对传人的句柄进行初始化
若传入的句柄为NULL,则内部会动态申请空间,进行初始化,并返回句柄首地址
返回值:若失败则返回NULL
2.链接mysql服务器
MYSQL *mysql real connect(MYSQL *mysql, char *host, char *user, char *pass, char *dbname,
int port, char *unix _socket, int client_flag)
mysql:初始化完成的mysql句柄;
host:用户名;
port:端口,默认0为3306端口,是mysql服务的端口;
pass: 密码;
dbname:要操作的库名称
unix socket:套接字或管道文件名-通常置NULL
client flag: 客户端的操作标志,通常置0;
返回值:成功则返回句柄首地址,失败返回NULL
3.设置客户端字符集(通常是与服务器保持一致,使用utf3)
int mysql_set character_set(MY sQL *mysal, char *name)
mysql:操作句柄;
name:宇符集名称,通常是"utf8”
返回值:成功返回0;失败返回非0;
4.选择要操作的数据库(切换操作的库)
int mysql_select_db(MYsQL *mysq. char *dbname):
5.将sql语句发送给服务器,并执行sql语句
int mysql_query(MY SQL *mysql, char *sql);
mysql:操作句柄;
sql:对数据库中的数据进行操作的sql语句
返回值:成功返回0:失败返回非0
语句有没有执行成功,决定了当前的操作是否完成了
6.增改删操作,只要语句执行成功,就OK,但是如果是查询语向,因为查询的话语向执行成功了,还需要获取查询结果
- 将查询结果保存到本地
MYSQL RES *mysql store result(MYSQL *mysal); mysq:操作句柄; - 返回值:成功返回结果集的结构首地址,失败返回NULL
将结果集保存到本地与执行语句这一步操作,若使用的是同一个操作句柄则存任线程安全问题 - 获取结果集中的结果行数和列数
int mysal num rows(MYSQL RES *res); 获取结果有多少行int mysql num fields(MYSQL RES *res);获取一行中有多少列 - 遍历结果集,逐条取出数据
MYSQL_ ROW mysql fetch row(MY SQL_ RES *res);
注意:这个函数或者说res 内部记录了当前的读写位置,只需要不断的调用,就可以逐条取出数据
这个返回值是个字符指针数组char *arr0,将一行中的多列进行扁平化存储,每一个元素都是一列数据 - 释放结果集
int mysql_ free_ result(MYSQL_ RES *res);
7. 关闭容户端连接,释放句柄资源
int mysql close(MYSQL *mysql);
代码展示
#include<mysql/mysql.h>
#include<unistd.h>
#include<string.h>
int main()
{
//初始化mysql句柄
MYSQL *mysql = mysql_init(NULL);
if(mysql == NULL)
{
printf("mysql init error !");
return -1;
}
//选择mysql服务器进行链接
if(mysql_real_connect(mysql,"0.0.0.0","root","","test",0,NULL,0) == NULL)
{
printf("connect failed :%s \n",mysql_error(mysql));
mysql_close(mysql);
}
//设置字符集
int ret;
ret = mysql_set_character_set(mysql,"utf8");
if(ret != 0)
{
printf("set character failed :%s \n",mysql_error(mysql));
}
//选择操作的数据库
mysql_select_db(mysql,"test");
//执行语句
const char* select_sql = "select * from student;";
ret = mysql_query(mysql,select_sql);
if(ret != 0)
{
printf("query failed :%s \n",mysql_error(mysql));
mysql_close(mysql);
return -1;
}
//查询语句执行结果
MYSQL_RES* res = mysql_store_result(mysql);
if(res == NULL)
{
printf("store result failed :%s \n",mysql_error(mysql));
mysql_close(mysql);
return -1;
}
int num_row = mysql_num_rows(res);
int num_col = mysql_num_fields(res);
for(int i = 0 ; i < num_row;i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
for(int j = 0 ;j < num_col;j++){
printf("%-15s",row[j]);
}
printf("\n");
}
mysql_free_result(res);
mysql_close(mysql);
}