本章Gitee仓库地址:mysql连接基本操作
文章目录
- 1. mysql connect库
- 2. mysql相关接口
- 2.1 mysql_init()
- 2.2 mysql_real_connect()
- 2.3 mysql_query()
- 2.4 mysql_store_result()
- 2.41 mysql_num_rows
- 2.42 mysql_num_fields
- 2.43 mysql_fetch_row
- 2.44 mysql_fetch_fields
- 2.5 mysql_free_result()
1. mysql connect库
使用C/C++连接MySQL
,要先下载mysql
的库
yum install -y mysql-community-server
在安装
mysql
的时候,就已经安装了
所需头文件:
ls /usr/include/mysql/
动静态库:
ls /lib64/mysql/*
如果没有,可以尝试安装
yum install mysql-devel
2. mysql相关接口
C语言API函数参考
2.1 mysql_init()
初始化mysql
结构体对象
参数:
MYSQL *mysql_init(MYSQL *mysql)
2.2 mysql_real_connect()
连接mysql
服务器
参数:
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 client_flag)
2.3 mysql_query()
参数:
int mysql_query(MYSQL *mysql, //初始化的对象
const char *stmt_str) //sql语句(无需带';'或'/G')
一般不会写这种客户端出来,这是直接将要执行的
sql
输入到程序
这里增删改都没问题,只需保证成功即可,这里一定会成功,因为是事务。
而select
需要将一个个的数据显示出来,让用户获取,所以select
还是需要获取上层的。
此外,如果需要显示中文,需要更改一下编码格式
链接建立好之后,默认的
latin1
,要改成utf8
mysql_set_character_set(my, "utf8");
2.4 mysql_store_result()
参数:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
查询结果以行为单位放在结果集当中
如何理解
mysql_res
:这些
+---+---+
、|
分隔符都是格式化输出显示出来的,并不是在mysql
真实存在的真实存在的是右侧的那些内容,列属性、每列的数据(内容)
查出来的数据,是在内存当中,
mysql
将所有的数据,读取出来的时候都当作字符串可以理解为
char **pptr[]
或者char * ptr[][]
2.41 mysql_num_rows
语法:
my_ulonglong mysql_num_rows(MYSQL_RES *result)
提取有多少行
2.42 mysql_num_fields
语法:
unsigned int mysql_num_fields(MYSQL_RES *result)
提取有多少列
2.43 mysql_fetch_row
语法:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
对结果集进行操作,拿到其中的一行
类似与C++的迭代器
2.44 mysql_fetch_fields
语法:
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result)
获取表结构的属性
MYSQL_RES *res = mysql_store_result(my);
my_ulonglong rows = mysql_num_rows(res);
my_ulonglong fields = mysql_num_fields(res);
std::cout << "行:" << rows << std::endl;
std::cout << "列:" << fields << std::endl;
//属性
MYSQL_FIELD *field_array = mysql_fetch_field(res);
for(int i = 0; i < fields; i++)
{
//格式化输出
std::cout << std::left << std::setw(15) << field_array[i].name << "\t";
}
std::cout << std::endl;
//内容(数据)
for(int i = 0; i < rows; i++)
{
MYSQL_ROW row = mysql_fetch_row(res);
for(int j = 0; j < fields; j++)
{
std::cout << std::left << std::setw(15) << row[j] << "\t";
}
std::cout << std::endl;
}
2.5 mysql_free_result()
提取的内容存在内存当中,系统给我们malloc
好了,用完需要我们自己释放
void mysql_free_result(MYSQL_RES *result)