目录
一、主要流程
二、主要API分析
1.数据库连接与初始化
1.1 mysql_init函数
1.2 mysql_options函数
1.3 mysql_real_connect函数
2.数据库事务操作
2.1 mysql_autocommit函数
2.2 mysql_query函数
3.数据库查询结果处理
3.1 mysql_store_result函数
3.2 mysql_num_fields函数
3.3 mysql_fetch_fields函数
3.4 mysql_fetch_row函数
4.资源释放与关闭连接
4.1 mysql_free_result函数
4.2 mysql_close函数
三、完整代码
一、主要流程
- 初始化MySQL连接环境。
- 建立与本地MySQL数据库的连接。
- 关闭自动提交,执行相关数据操作并根据结果提交或回滚事务。
- 执行查询操作,获取结果集。
- 处理结果集的字段和数据行。
- 释放结果集资源并关闭数据库连接。
二、主要API分析
1.数据库连接与初始化
1.1 mysql_init函数
MYSQL *mysql_init(MYSQL *mysql);
若传入nullptr则创建新的MYSQL结构用于连接;若传入已有的MYSQL结构则对其进行初始化。
1.2 mysql_options函数
int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg);
- mysql:连接对象,操作的目标。
- option:指定设置的选项类型。
- arg:要设置的字符集。
1.3 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 client_flag );
- mysql:初始化后的MYSQL结构。
- host:服务器地址。
- user:用户名。
- passwd:密码。
- db:数据库名。
- port:端口号。
- unix_socket:Unix下套接字,可以为空。
- client_flag:连接标志,默认为0。
2.数据库事务操作
2.1 mysql_autocommit函数
int mysql_autocommit(MYSQL *mysql, my_bool auto_mode);
- mysql:连接对象。
- auto_mode:0关闭自动提交,1开启自动提交。
2.2 mysql_query函数
int mysql_query(MYSQL *mysql, const char *q);
- mysql:连接对象。
- q:要执行的SQL语句字符串。
3.数据库查询结果处理
3.1 mysql_store_result函数
MYSQL_RES *mysql_store_result(MYSQL *mysql);
mysql:连接对象,从其获取结果。
3.2 mysql_num_fields函数
unsigned int mysql_num_fields(MYSQL_RES *result);
result:结果集结构指针,返回字段的数量。
3.3 mysql_fetch_fields函数
MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result);
result:结果集结构指针,返回字段信息的数组指针。
3.4 mysql_fetch_row函数
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
result:结果集结构指针,返回下一行数据指针或nullptr。
4.资源释放与关闭连接
4.1 mysql_free_result函数
void mysql_free_result(MYSQL_RES *result);
result:结果集结构指针,释放其占用内存。
4.2 mysql_close函数
void mysql_close(MYSQL *mysql);
mysql:连接对象指针,关闭连接释放资源。
三、完整代码
#include<iostream>
#include<mysql.h>
#include<iomanip>
using namespace std;
int main(void)
{
MYSQL* mysql = mysql_init(nullptr);
if (!mysql) {
cerr << "Error init." << endl;
return -1;
}
mysql = mysql_real_connect(mysql, "127.0.0.1",
"root", "root", "test01", 3306, nullptr, 0);
if (!mysql) {
cerr << "Error connect." << endl;
return -1;
}
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk");
mysql_autocommit(mysql, 0);
int ret1 = mysql_query(mysql, "insert into t1 values(6, 'tom', '男', '4287')");
int ret2 = mysql_query(mysql, "insert into t1 values(7, 'lucy', '女', '5471')");
if (ret1 == 0 && ret2 == 0) {
mysql_commit(mysql);
}
else {
mysql_rollback(mysql);
}
int ret = mysql_query(mysql, "select * from t1");
if (ret) {
cerr << "Error query." << endl;
return -1;
}
MYSQL_RES* res = mysql_store_result(mysql);
if (!res) {
cerr << "Error store." << endl;
return -1;
}
int num = mysql_num_fields(res);
MYSQL_FIELD* fields = mysql_fetch_fields(res);
for (int i = 0; i < num; i++) {
cout << left << setw(10) << fields[i].name;
}
cout << endl;
MYSQL_ROW row;
while (row = mysql_fetch_row(res)) {
for (int i = 0; i < num; i++) {
cout << left << setw(10) << row[i];
}
cout << endl;
}
mysql_free_result(res);
mysql_close(mysql);
return 0;
}
参考内容:
爱编程的大丙