当前位置:   article > 正文

第三方库认识- Mysql 数据库 API 认识

第三方库认识- Mysql 数据库 API 认识


一、msyql数据库API接口

1.初始化mysql_init()——mysql_init

mysql_init API文档链接别点了,也没样例代码,反正我是看不懂。

要使用库,必须先进行初始化!
函数:

MYSQL *mysql_init(MYSQL *mysql);
  • 1
  • 参数为空则动态申请句柄空间进行初始化
  • 失败返回NULL

样例:



  • 1
  • 2

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); 
  • 1
  • 2
  • 3
  • 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)
  • 1
  • mysql–初始化完成的句柄
  • csname–字符集名称,通常:“utf8”
  • 返回值:成功返回0, 失败返回非0;

4.选择操作的数据库——mysql_select_db

函数:

int mysql_select_db(MYSQL *mysql, const char *db)
  • 1
  • mysql–初始化完成的句柄
  • db-----要切换选择的数据库名称
  • 返回值:成功返回0, 失败返回非0;

5.执行sql语句——mysql_query

函数:

int mysql_query(MYSQL *mysql, const char *stmt_str) 
  • 1
  • mysql–初始化完成的句柄
  • stmt_str–要执行的sql语句
  • 返回值:成功返回0, 失败返回非0;

6.保存查询结果到本地——mysql_store_result

函数:

MYSQL_RES *mysql_store_result(MYSQL *mysql) 
  • 1
  • mysql–初始化完成的句柄
  • 返回值:成功返回结果集的指针, 失败返回NULL;

7.获取结果集中的行数与列数—— mysql_num_rows/mysql_num_fields

函数:

uint64_t mysql_num_rows(MYSQL_RES *result)
  • 1
  • result–保存到本地的结果集地址
  • 返回值:结果集中数据的条数
    函数:
unsigned int mysql_num_fields(MYSQL_RES *result)
  • 1
  • result–保存到本地的结果集地址
  • 返回值:结果集中每一条数据的列数;

8.遍历结果集——mysql_fetch_row

函数:

MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) 
  • 1
  • result–保存到本地的结果集地址
  • 返回值:实际上是一个char **的指针,将每一条数据做成了字符串指针数组 row[0]-第0列 row[1]-第1列
  • 并且这个接口会保存当前读取结果位置,每次获取的都是下一条数据

9.释放结果集——mysql_free_result

函数:

void mysql_free_result(MYSQL_RES *result) 
  • 1
  • result–保存到本地的结果集地址
  • /返回值:void

10.关闭数据库客户端连接,销毁句柄——mysql_close

函数:

void mysql_close(MYSQL *mysql) 
  • 1

11.获取mysql接口执行错误原因——mysql_error

函数:

const char *mysql_error(MYSQL *mysql) 
  • 1

创建测试用库和表

库名: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) 
); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

使用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;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/920549
推荐阅读
相关标签
  

闽ICP备14008679号