1.准备工作
1.1 安装mysql
在centos7中安装mysql8.0
1.保证mysql服务有效
bash
sudo yum install -y mysql-community-server
2.下载合适自己平台的mysql connect库
bash
sudo yum install -y mysql-community-devel
1.2 配置编译配置
包含头文件 和链接库。
头文件在系统中,不需显示包含。

Makefile:

2.MySQL接口使用
官方文档:MySQL :: MySQL 8.4 C API Developer Guide :: 4 C API Function Reference
2.0 查询版本
cpp
const char * mysql_get_client_info(void)
2.1 初始化MYSQL对象
cpp
MYSQL * mysql_init(MYSQL *mysql)
2.2 连接数据库
cpp
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 设置编码方式
cpp
int mysql_set_character_set(MYSQL *mysql, const char *csname)
2.4 执行SQL语句
cpp
int mysql_query(MYSQL *mysql, const char *stmt_str)
2.5 获取查询结果
cpp
MYSQL_RES * mysql_store_result(MYSQL *mysql)
1.获取结果行数
cpp
uint64_t mysql_num_rows(MYSQL_RES *result)
2.获取结果列数
cpp
unsigned int mysql_num_fields(MYSQL_RES *result)
3.获取结果列名
cpp
MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result)
4.获取结果内容
cpp
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
2.6 关闭连接
cpp
void mysql_close(MYSQL *mysql)
2.7 *事务相关
cpp
bool mysql_autocommit(MYSQL *mysql, bool mode)
bool mysql_commit(MYSQL *mysql)
bool mysql_rollback(MYSQL *mysql)
3 案例
cpp
#include <iostream>
#include <mysql/mysql.h>
const std::string host = "localhost";
const std::string user = "lmx";
const std::string password = "0506";
const std::string db = "conn";
const unsigned int port = 3306;
int main()
{
//查看版本号
std::cout << "mysql client Version:" << mysql_get_client_info() << std::endl;
//初始化MYSQL对象
MYSQL *mysql = mysql_init(nullptr);
if (mysql == nullptr)
{
std::cerr << "init MySQL error" << std::endl;
return 1;
}
//建立连接
if (mysql_real_connect(mysql, host.c_str(), user.c_str(), password.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
{
std::cout << "connect MySQL error" << std::endl;
return 2;
}
//设置编码方式
if(mysql_set_character_set(mysql, "utf8") != 0)
{
std::cout << "set character error" << std::endl;
return 3;
}
// const std::string sql = "insert into user (name, age, telphone) values('阿哒', 25, '14455')";
// const std::string sql = "update user set age = 18 where id = 1";
// const std::string sql = "delete from user where id = 3";
// const std::string sql = "select * from user";
while (true)
{
std::string sql;
std::cout << "MySQL<< ";
if (!(std::getline(std::cin, sql)) || sql == "quit")
{
std::cout << "byebye" << std::endl;
break;
}
//执行查询
if (mysql_query(mysql, sql.c_str()) == 0)
{
std::cout << "success" << std::endl;
}
else
{
std::cerr << "failed" << std::endl;
return 4;
}
//捕获结果
if (sql.find("select") != std::string::npos)
{
MYSQL_RES *result = mysql_store_result(mysql);
if(result == nullptr)
{
std::cerr << "store result error" << std::endl;
return 5;
}
//行数
uint64_t rows = mysql_num_rows(result);
//列数
unsigned int fields = mysql_num_fields(result);
//列属性[array]
MYSQL_FIELD *field = mysql_fetch_field(result);
// 属性
for (int i = 0; i < fields; i++)
{
std::cout << field[i].name << "\t";
}
std::cout << std::endl;
// 内容
for (int i = 0; i < rows; i++)
{
//行内容
MYSQL_ROW row = mysql_fetch_row(result);
for (int j = 0; j < fields; j++)
{
std::cout << row[j] << "\t";
}
std::cout << std::endl;
}
}
}
mysql_close(mysql);
return 0;
}