文章目录
- 一、msyql数据库API接口
- 1.初始化mysql_init()——mysql_init
- 2.链接数据库mysql_real_connect——mysql_real_connect
- 3.设置当前客户端的字符集——mysql_set_character_set
- 4.选择操作的数据库——mysql_select_db
- 5.执行sql语句——mysql_query
- 6.保存查询结果到本地——mysql_store_result
- 7.获取结果集中的行数与列数—— mysql_num_rows/mysql_num_fields
- 8.遍历结果集——mysql_fetch_row
- 9.释放结果集——mysql_free_result
- 10.关闭数据库客户端连接,销毁句柄——mysql_close
- 11.获取mysql接口执行错误原因——mysql_error
- 创建测试用库和表
- 使用API实现数据的增删改查操作
一、msyql数据库API接口
1.初始化mysql_init()——mysql_init
mysql_init API文档链接别点了,也没样例代码,反正我是看不懂。
要使用库,必须先进行初始化!
函数:
MYSQL *mysql_init(MYSQL *mysql);
- 参数为空则动态申请句柄空间进行初始化
- 失败返回NULL
样例:
2.链接数据库mysql_real_connect——mysql_real_connect
初始化完毕之后,必须先链接数据库,进行后续操作。(mysql网络部分是基于TCP/IP的)
函数:
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–初始化完成的句柄
- host—连接的mysql服务器的地址
- user—连接的服务器的用户名
- passwd-连接的服务器的密码
- db ----默认选择的数据库名称
- port—连接的服务器的端口: 默认0是3306端口
- unix_socket—通信管道文件或者socket文件,通常置NULL
- client_flag—客户端标志位,通常置0
- 返回值:成功返回句柄,失败返回NULL
3.设置当前客户端的字符集——mysql_set_character_set
函数:
int mysql_set_character_set(MYSQL *mysql, const char *csname)
- mysql–初始化完成的句柄
- csname–字符集名称,通常:“utf8”
- 返回值:成功返回0, 失败返回非0;
4.选择操作的数据库——mysql_select_db
函数:
int mysql_select_db(MYSQL *mysql, const char *db)
- mysql–初始化完成的句柄
- db-----要切换选择的数据库名称
- 返回值:成功返回0, 失败返回非0;
5.执行sql语句——mysql_query
函数:
int mysql_query(MYSQL *mysql, const char *stmt_str)
- mysql–初始化完成的句柄
- stmt_str–要执行的sql语句
- 返回值:成功返回0, 失败返回非0;
6.保存查询结果到本地——mysql_store_result
函数:
MYSQL_RES *mysql_store_result(MYSQL *mysql)
- mysql–初始化完成的句柄
- 返回值:成功返回结果集的指针, 失败返回NULL;
7.获取结果集中的行数与列数—— mysql_num_rows/mysql_num_fields
函数:
uint64_t mysql_num_rows(MYSQL_RES *result);
- result–保存到本地的结果集地址
- 返回值:结果集中数据的条数
函数:
unsigned int mysql_num_fields(MYSQL_RES *result)
- result–保存到本地的结果集地址
- 返回值:结果集中每一条数据的列数;
8.遍历结果集——mysql_fetch_row
函数:
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
- result–保存到本地的结果集地址
- 返回值:实际上是一个char **的指针,将每一条数据做成了字符串指针数组 row[0]-第0列 row[1]-第1列
- 并且这个接口会保存当前读取结果位置,每次获取的都是下一条数据
9.释放结果集——mysql_free_result
函数:
void mysql_free_result(MYSQL_RES *result)
- result–保存到本地的结果集地址
- /返回值:void
10.关闭数据库客户端连接,销毁句柄——mysql_close
函数:
void mysql_close(MYSQL *mysql)
11.获取mysql接口执行错误原因——mysql_error
函数:
const char *mysql_error(MYSQL *mysql)
创建测试用库和表
库名:test_db
表名:test_tb{
id(int)
age(int)
name(varcher32)
score(decimal(4,2))
}
create database if not exists test_db;
use test_db;
create table if not exists test_tb(
id int primary key auto_increment,
age int,
name varchar(32),
score decimal(4, 2)
);
使用API实现数据的增删改查操作
#include<iostream>
#include<mysql/mysql.h>
#include<string>
using namespace std;
int main()
{
//1.操作句柄初始化,参数为空就动态申请句柄进行初始化
MYSQL* mysql = mysql_init(NULL);
if(mysql==NULL)
{
cerr<<"init mysql handle failed"<<endl;
return -1;
}
string host = "127.0.0.1";
string user = "root";
string passwd ="123456789.whC";
string dp = "test_db";
//2.链接数据库
if( mysql_real_connect(mysql,host.c_str(),user.c_str(),passwd.c_str(),dp.c_str(),0,NULL,0)==NULL)
{
cerr<<"mysql connect error "<<mysql_error(mysql)<<endl;
return -1;
}
//3.设置字符集
mysql_set_character_set(mysql,"utf8");
//4.选择数据库
int ret = mysql_select_db(mysql,"test_db");
if(ret!=0)
{
cerr<<"select db error"<<endl;
}
//增
// string sql = "insert into test_tb (age,name,score)values(18,'whc',12.33);";
// ret = mysql_query(mysql,sql.c_str());
// if(ret!=0)
// {
// cerr<<"mysql query select error"<<endl;
// }
//改
string sql1 ="update test_tb set age=100 where id=2;";
ret = mysql_query(mysql,sql1.c_str());
if(ret!=0)
{
cerr<<"mysql query update error"<<endl;
}
string sql2 ="delete from test_tb where id =6;";
//删
// mysql_query(mysql,sql2.c_str());
//查
string sql3 ="select * from test_tb;";
//执行语句
ret = mysql_query(mysql,sql3.c_str());
if(ret!=0)
{
cerr<<"mysql query select error"<<endl;
return -1;
}
//保存查询结果到本地
MYSQL_RES* result = mysql_store_result(mysql);
//获取结果集中的行数
uint64_t row_nums = mysql_num_rows(result);
//获取结果集中的列数
unsigned int field_nums = mysql_num_fields(result);
cout<<row_nums<<" "<<field_nums<<endl;
//遍历结果集
MYSQL_ROW row;
for(int i = 0;i<row_nums;i++)
{
row = mysql_fetch_row(result);
for(int j = 0;j<field_nums;j++)
{
cout<<row[j]<<" ";
}
cout<<endl;
}
//释放结果集
mysql_free_result(result);
//关闭数据库客户端连接,销毁句柄
mysql_close(mysql);
return 0;
}